目前使用 /etc/init.d/celeryd 做守护进程
在实践中遇到一些问题:
django 项目, celery == 3.1.12
更新代码后需要重启 worker 来加载新代码
但是 /etc/init.d/celeryd 脚本只可以用 root 执行,每次更新代码都切到 root 感觉这样不合理,但是 google 了很久没有找到合适的方法
尝试的方法:
--autoreload ,
启动参数加 autoreload ,按照文档上的说法会重新加载 tasks 文件的,但是并没有看到效果
kill -HUP :
对主进程 pid 用 HUP ,会退出程序。对子进程使用 HUP ,倒是正常重启,但是多个进程操作起来麻烦
celery multi :
使用 celery multi 启动 worker ,可以使用 celery multi 来重启,不需要 root 权限,但是在实践中不论是启动还是重新,都需要加一串参数。
写成脚本可能比较方便,没有更好的方式办法的话,会选择这个
supervisord :
下一步尝试这个,没有用过 supervisord ,只知道进程挂掉的时候他可以让进程重新跑起来。打算在更新代码之后 kill 掉 worker 主进程,然后由 supervisord 启动
请教大家在实践中:
有什么比较好,比较方便的方式来管理 celery ,尤其是更新代码之后加载新代码
像 uwsgi 的 kill -HUP 就很方便
1
111111111111 OP 居然没人回答,自己来填坑...
看了一遍 celeryd 里的内容,发现这货也是用 celery multi 的方式来启动进程,练习的时候知道 celery multi 是可以用非 root 执行的,。 接下来就好办了,把他改成不需要 root 的样子, 一、新建 celeryd 到 home 目录里, 二、注释掉两个地方: 1. 第 33 行,用户身份检查 2. 第 107 行,对配置文件的检查 三、_chuid()函数中的 ```# su "$CELERYD_USER" -c "$CELERYD_MULTI $*"` `` 改为 ```$CELERYD_MULTI $*``` 这样就可以用脚本来管理 celery 了 ---- 另外发现, celery multi resart 的执行结果启动了新的进程,不是-HUP 的方式,之前在文档了也看到说-HUP 的方式不被推荐。 主进程收到-HUP 信号会退出,但是子进程还是可以重新启动加的 |