2016-02-01 41 views
1

我有一個芹菜運行在碼頭集裝箱處理rabbitmq的任務。我試圖停止並刪除芹菜容器,同時允許當前正在運行的任務完成。該文檔建議,發送TERM或INT信號到主進程應該加熱關機芹菜,儘管我發現子進程剛剛被殺死。優雅地停在碼頭集裝箱的芹菜

當我送TERM正在運行的進程,它拋出:

WorkerLostError('Worker exited prematurely: signal 15 (SIGTERM).',)

當我送INT運行過程中只是沒有錯誤退出,但它也不允許任務完成的文檔建議。

我開始泊塢窗容器用命令: su -m celery_user -c "python manage.py celery worker -Q queue-name"

爲什麼這可能發生的任何想法?信號是否會終止容器以及芹菜過程? docker kill --signal="TERM" containeriddocker exec containerid kill -15 1

回答

1

docker kill將殺死容器:

我與發送信號。你需要做的是隻發送信號到主芹菜進程。

我個人使用倉庫容器內的supservisord來管理芹菜工。默認情況下,supervisord將發送SIGTERM來停止該過程。

這裏的芹菜

[program:celery] 
command=celery worker -A my.proj.tasks --loglevel=DEBUG -Ofair --hostname celery.host.domain.com --queues=celery 
environment=PYTHONPATH=/etc/foo/celeryconfig:/bar/Source,PATH=/foo/custom/bin:/usr/kerberos/bin 
user=celery-user 
autostart=true 
stdout_logfile=/var/log/supervisor/celery.log 
redirect_stderr=true 
+0

啊樣本主管的配置 - 是的,我曾在我的頭上那個上司會引起相同。主管正在按預期工作,謝謝。 – Andrew