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