我以一种不常见的方式使用 celery - 我在 celery 启动时创建自定义进程,这个进程应该在 celery 运行时一直运行。芹菜工人使用这个过程来完成他们的任务(不需要详细信息)。
我从命令行运行 celery,一切正常:
celery -A celery_jobs.tasks.app worker -B --loglevel=warning
但是当我celeryd
用来守护芹菜时,没有办法阻止它。命令celeryd stop
试图停止芹菜,但从未结束。
当我在这两种情况下检查进程树时,存在差异 - 从命令行运行时,父进程显然是 celery 进程(主进程,其中有 celery 工人作为子进程)。杀死(停止)父 celery 进程将停止所有 celery 工人和我的自定义进程。
但是当使用 运行时celeryd
,我的自定义进程有父进程/sbin/init
- 并且调用celeryd stop
不起作用 - 似乎主 celery 进程正在等待某些东西,或者无法停止我的自定义进程,因为它不是 celery 的子进程。
我对流程了解不多,也不容易找到信息,因为我不知道我应该搜索什么,所以任何提示都值得赞赏。