我一直想知道并为此寻找解决方案而且我找不到任何解决方案。
我在使用docker-compose构建的容器中运行Celery。我的容器配置如下:
celery:
build: .
container_name: cl01
env_file: ./config/variables.env
entrypoint:
- /celery-entrypoint.sh
volumes:
- ./django:/django
depends_on:
- web
- db
- redis
stop_grace_period: 1m
我的入口点脚本如下所示:
#!/bin/sh
# Wait for django
sleep 10
su -m dockeruser -c "celery -A myapp worker -l INFO"
现在,如果我运行docker-compose stop
,我希望有一个温暖(优雅)关闭,为Celery提供1分钟(stop_grace_period
)来完成已经启动的任务。然而,docker-compose stop
似乎立即杀死了芹菜。芹菜还应该记录它被要求优雅地关闭,但除了突然停止我的任务日志之外我什么也看不见。
我做错了什么或者我需要做些什么才能让芹菜优雅地关闭?
编辑:
下面关于向--timeout
提供docker-compose stop
参数的建议答案并不能解决我的问题。
答案 0 :(得分:1)
通过docs
Usage: stop [options] [SERVICE...]
Options:
-t, --timeout TIMEOUT Specify a shutdown timeout in seconds (default: 10).
尝试将超时设置为至少60秒。
答案 1 :(得分:0)
尝试使用此:
docker-compose down
答案 2 :(得分:0)
您需要将celery
进程标记为exec
,这样celery进程将具有与docker命令相同的ID,并且docker将能够向其发送SIGTERM信号并正常关闭celery进程。
# should be the last command in script
exec celery -A myapp worker -l INFO