Контейнер Оптимизированный ОС Изящное отключение сельдерея
Запуск 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
с фактическим кодом выхода вашего основного процесса.)