Как указать команду выключения демона с помощью upstart?

9

В конфигурации upstart как определить, какую команду следует использовать для выключения сервера. Допустим, у меня есть демон, который имеет два отдельных процесса.

  • startup.sh - запустить сервер
  • shutdown.sh - выключить сервер

Предположим, у меня есть файл выскочки, который выглядит следующим образом.

description "Some Example Service"
author "Me"

start on runlevel [2345]
stop on runlevel [016]
respawn

exec startup.sh 

Как мне сказать upstart, что он должен вызывать shutdown.shпри выключении сервера? Как обычно upstart ожидает выключения демона?

военно-картографическая служба
источник

Ответы:

10

Использование execдля запуска процесса - это нормально, но при его остановке, если вам абсолютно необходимо запустить определенный скрипт или набор команд, вы можете использовать pre-stopраздел.

pre-stop exec shutdown.sh

Я предполагаю, что вы пытались использовать только exec stanza, и это не сработало, возможно, потому что ваш демон требует некоторой специальной очистки. Обратите внимание, что демоны с хорошим поведением должны получать сигнал от upstart, когда работа остановлена, и если они обрабатывают сигнал соответствующим образом, дополнительная очистка не требуется.

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

если есть что-то критическое, например, сброс на диск и увеличение тайм-аута не вариант, предстоп - не плохое место для этого

Также прочитайте этот раздел для всего рабочего процесса, что происходит, когда вы останавливаете работу. Обратите внимание, когда выполняется предварительная остановка, и как впоследствии посылается сигнал процессу, как обычно выскочка обрабатывает остановки заданий.

Мой источник - официальная кулинарная книга Upstart по адресу: http://upstart.ubuntu.com/cookbook/.

roadmr
источник
1
«Обратите внимание, что хорошо работающие демоны должны получать сигнал от upstart, когда работа остановлена, и если они обрабатывают сигнал соответствующим образом, дополнительная очистка не требуется». - обратите внимание, что мы используем сценарии в мире Unix для того, чтобы контролировать вещи помимо работы программистов. И это нелепое замечание, потому что нам нужно место, например, для отправки электронной почты, снятия блокировки с диска и т. Д., И эти задачи не обязательно должны быть частью самого демона. Таким образом, выскочка не готова к использованию в среде серверов.
Kakaz
Из этого ответа (Единого!) Я вижу, что нет хорошего способа сделать то, что нам нужно?
Kakaz