容器优化的操作系统优雅地关闭芹菜

时间:2018-01-11 01:00:02

标签: docker celery google-kubernetes-engine google-container-os

在GCE上运行COS

关于如何让COS进行优雅的docker关闭的任何想法?

我最内心的过程是芹菜,它说他希望SIGTERM能够优雅地停止

http://docs.celeryproject.org/en/latest/userguide/workers.html#stopping-the-worker

我的入口点类似于

exec celery -A some_app worker -c some_concurrency

在COS上我正在为我的docker运行一个服务,比如

write_files:
- path: /etc/systemd/system/servicename.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Some service

    [Service]
    Environment="HOME=/home/some_home"
    RestartSec=10
    Restart=always
    ExecStartPre=/usr/share/google/dockercfg_update.sh
    ExecStart=/usr/bin/docker run -u 2000 --name=somename --restart always some_image param_1 param_2
    ExecStopPost=/usr/bin/docker stop servicename
    KillMode=processes
    KillSignal=SIGTERM

但最终当我的COS实例关闭时,它只是拉动插头。

我是否需要添加关机脚本才能停靠?我需要做一些更先进的事情吗?

1 个答案:

答案 0 :(得分:1)

收到SIGTERM时,容器进程的预期退出状态是多少? 运行systemctl stop <service>然后systemctl status -l <service>应显示主进程的退出代码。例如:

Main PID: 21799 (code=exited, status=143)

一种可能性是进程确实接收SIGTERM并正常关闭,但返回非零退出代码。 这将使systemd相信它没有正确关闭。如果是这种情况,请添加

SuccessExitStatus=143

到你的systemd服务应该有所帮助。 (将143替换为主进程的实际退出代码。)