【问题标题】:Container Optimized OS Graceful Shutdown of CeleryContainer Optimized OS 优雅关闭 Celery
【发布时间】:2018-06-20 06:31:59
【问题描述】:

在 GCE 上运行 COS

关于如何让 COS 优雅地关闭 docker 有什么想法吗?

我最里面的进程是 celery,它说他想要一个 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 实例关闭时,它只是拔掉了插头。

我需要添加关闭脚本来执行 docker stop 吗?我需要做一些更高级的事情吗?

【问题讨论】:

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


    【解决方案1】:

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

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

    一种可能性是进程确实收到SIGTERM 并正常关闭,但返回非零退出代码。 这将使 systemd 认为它没有正确关闭。如果是这样,添加

    SuccessExitStatus=143

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-02
      • 2021-03-27
      • 1970-01-01
      • 2019-11-22
      • 2018-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多