Контейнер Оптимизированный ОС Изящное отключение сельдерея

Запуск COS на GCE

Любые идеи о том, как заставить COS изящно завершить работу докера?

Мой самый внутренний процесс - сельдерей, который говорит, что он хочет, чтобы SIGTERM изящно остановился

http://docs.celeryproject.org/en/latest/userguide/workers.html

Моя точка входа что-то вроде

exec celery -A some_app worker -c some_concurrency

На COS я запускаю свой докер сервис, что-то вроде

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 ответ

Каков ожидаемый статус выхода вашего контейнерного процесса, когда он получает SIGTERM? Бег systemctl stop <service> затем systemctl status -l <service> должен показать код завершения основного процесса. Пример:

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

Одна возможность состоит в том, что процесс получает SIGTERM и корректно завершает работу, но возвращает ненулевой код выхода. Это заставит systemd поверить, что он не завершил работу корректно. Если это так, добавив

SuccessExitStatus=143

на ваш системный сервис должен помочь. (Заменить 143 с фактическим кодом выхода вашего основного процесса.)

Другие вопросы по тегам