Jan*_*ker 5 django celery docker docker-compose
我一直想知道并寻找解决方案,但我没有找到任何解决方案。
我在用 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
Run Code Online (Sandbox Code Playgroud)
我的入口点脚本如下所示:
#!/bin/sh
# Wait for django
sleep 10
su -m dockeruser -c "celery -A myapp worker -l INFO"
Run Code Online (Sandbox Code Playgroud)
现在,如果我运行docker-compose stop,我希望有一个温暖的(优雅的)关机,给 Celery 提供的 1 分钟 ( stop_grace_period) 来完成已经开始的任务。然而docker-compose stop似乎直接杀死了芹菜。Celery 还应该记录它被要求正常关闭,但除了突然停止我的任务日志之外,我什么也没看到。
我做错了什么或者我需要改变什么才能让 Celery 优雅地关闭?
编辑:下面关于提供--timeout参数的建议答案docker-compose stop并不能解决我的问题。
您需要用 标记celery进程exec,这样 celery 进程将具有与 docker 命令相同的 ID,并且 docker 将能够向其发送 SIGTERM 信号并正常关闭 celery 进程。
# should be the last command in script
exec celery -A myapp worker -l INFO
Run Code Online (Sandbox Code Playgroud)
通过文档
Usage: stop [options] [SERVICE...]
Options:
-t, --timeout TIMEOUT Specify a shutdown timeout in seconds (default: 10).
Run Code Online (Sandbox Code Playgroud)
尝试将超时设置至少为 60 秒。
| 归档时间: |
|
| 查看次数: |
1978 次 |
| 最近记录: |