目前使用 /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 就很方便
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.