我已经使用Apache2部署了Django应用程序,并且一直在努力配置Celery。
我使用systemd来实现celery documentation中所述的celery和celery_beat的守护进程。有点用这种配置(不建议用于生产)
ExecStart=/path/to/celery/bin/ -A proj worker
ExecStart=/path/to/celery/bin/ -A proj beat
但是我无法使“正式”配置生效,像这样:
ExecStart=/bin/sh -c '${CELERY_BIN} multi start ${CELERYD_NODES} \
-A ${CELERY_APP} --pidfile=${CELERYD_PID_FILE} \
--logfile=${CELERYD_LOG_FILE} --loglevel=${CELERYD_LOG_LEVEL} ${CELERYD_OPTS}'
服务正在运行,但计划的任务未执行。
我已阅读此article(Celery 4中等定期任务),建议使用有监督的。这就是我所做的,我的配置文件如下所示:
[program:projworker]
command=/path/to/celery/bin/-A proj worker -l info
因此,它实际上与Celery文档中不建议使用的命令相同。(尽管对于这两种配置,我都正确设置了项目目录,用户和组等)。但是一切进展顺利。
最后,我的问题是:这实际上尊重良好做法吗?根据这份piece文档,supervisor负责守护进程的处理,但实际上我不确定自己是否正确。
答案 0 :(得分:1)
通常来说,我建议您使用multi。使用multi的原因是multi提供了一种语法,使您可以优雅地启动,停止或重新启动celery worker。就是说,如果您不需要该功能,或者您有一个很好的方式使用supervisor在不使用multi的情况下启动,停止和重新启动,请按照您的方式进行操作。
Here is the sample recommended configuration for celery beat with supervisord。