Celery定时任务
在celery中执行定时任务非常简单,只需要设置celery对象的CELERYBEAT_SCHEDULE属性即可。
下面我们接着上面的代码,在celeryconfig.py中添加CELERYBEAT_SCHEDULE变量:
CELERY_TIMEZONE = 'UTC' CELERYBEAT_SCHEDULE = { 'taskA_schedule' : { 'task':'tasks.taskA', 'schedule': crontab(minute=30, hour=5), 'args':(5,6) } }每天的凌晨5点执行taskA 任务。
启动worker
celery worker -A src.task --loglevel=info -Q test_celery_queue -f /data/test.celery/celery.log启动celery beat
celery beat -A src.app --loglevel=info --logfile=/data/test.celery/celery.beat.log使用supervisor
[group:test_celery] programs = test_celery.async,test_celery.beat [program:test_celery.async] command=/data/test.celery/env/bin/celery worker -A src.app --loglevel=info -Q test_celery_queue numprocs=1 numprocs_start=0 priority=999 autostart=true startsecs=3 startretries=3 exitcodes=0,2 stopsignal=QUIT stopwaitsecs=60 directory=/data/test.celery user=www-data stopasgroup=false killasgroup=false redirect_stderr=true stdout_logfile=/data/log/test.celery/test_celery.log stdout_logfile_maxbytes=250MB stdout_logfile_backups=10 stderr_logfile=/data/log/test.celery/test_celery.err stderr_logfile_maxbytes=250MB stderr_logfile_backups=10 environment=PYTHONPATH='/data/test.celery/';C_FORCE_ROOT="true" [program:test_celery.beat] command=/data/test.celery/env/bin/celery beat -A src.app --loglevel=info numprocs=1 numprocs_start=0 priority=999 autostart=true startsecs=3 startretries=3 exitcodes=0,2 stopsignal=QUIT stopwaitsecs=60 directory=/data/test.celery user=www-data stopasgroup=false killasgroup=false redirect_stderr=true stdout_logfile=/data/log/test.celery/test_celery.beat.log stdout_logfile_maxbytes=250MB stdout_logfile_backups=10 stderr_logfile=/data/log/test.celery/test_celery.beat.err stderr_logfile_maxbytes=250MB stderr_logfile_backups=10 environment=PYTHONPATH='/data/test.celery/';C_FORCE_ROOT="true"简单说明
test_celery.async 和 test_celery.beat 是两个program,分别对应worker和beat,而它们又同属于 test_celery 这个组,这样便于同时管理。注意到command参数了吗?因为我使用了virtualenv来隔离每个项目的包环境,所以需要明确指出 celery命令所在的目录(如果全局安装了celery就必要了), 这也是为什么上文项目结构中会有一个 env 文件夹的原因。使用了虚拟环境之后, 通常需要先激活环境 source /data/test.celery/env/bin/activateenvironment 下设置 PYTHONPATH 我们在上文中提到过。总之,你要让Python知道你项目包得位置,设置PYTHONPATH 只是一种方式。(supervisorctl) 管理程序进程
通过 sudo supervisorctl 可以进入管理客户端。我们可以使用各种命令管理程序的进程:
常用的命令有:
status 查看状态 restart 重新启动 start 启动 stop 停止 update 更新配置也可以不进入来管理 ,例如每次更新玩配置,我们可以使其快速生效:
sudo supervisorctl update参考链接: https://github.com/importcjj/notes/issues/2
