Celery 定时任务的启动方式
工作中踩了一些坑,抽空整理了一下。现阶段启动 celery beat
一般有两种方式:
直接启动
在生产环境中推荐使用这种方式。可以在supervisor
中新增一个配置文件来启动。并在ansible
配置文件中添加重启项目。
$ celery -A proj beat |
Beat 服务需要一个地方存储上次定时任务运行的时间(默认名为celerybeat-schedule
,是一个本地shelve
数据库文件),所以要确保 Beat 在该文件所在的目录有写权限。否则会因为权限报错。可以通过以下命令指定celerybeat-schedule
目录:
$ celery -A proj beat -s /home/celery/var/run/celerybeat-schedule |
在启动 Worker 时增加参数
虽然这种方式在只启动一个 worker
节点的时候很方便,但通常在生产环境中不推荐这种方式。因为生产环境常常启动多个 worker
节点,这种启动方式会导致每个worker
节点都启动一个beat
服务,可能会重复执行事先做好的定时任务。
$ celery -A proj worker -B |
其他
使用 Django 插件
默认的调度程序用本地的shelve
数据库文件来储存定时任务上次运行的时间,使用django-celery-beat
可以将这些信息储存在 Django 数据库中。
安装包
$ pip install django-celery-beat
在配置文件中将改包加入
INSTALLED_APPS
配置项中INSTALLED_APPS = (
...,
'django_celery_beat',
)
```
- 运行 Django 数据库迁移来创建表
```cmd
$ python manage.py migrate调用 Beat 时使用参数
$ celery -A proj beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler