Я работаю над пакетом, который нуждается в двух заданиях Upstart: одно, которое запускает демон, и другое, которое запускает вспомогательный демон , если файл конфигурации требует этого. Логика определения того, следует ли запускать поддерживающий демон, включает обработку файла конфигурации с sed
и друзьями, что вызывает проблемы с обнаружением демонизации в Upstart (Upstart не может различить PID), поэтому expect fork
и expect daemon
aren ' т полезно. К сожалению, это означает, что Upstart обнаруживает первый вызов sed
в качестве первого PID и немедленно запускает основное задание, прежде чем вспомогательный демон полностью инициализируется. Это часто приводит к преждевременному прекращению основной работы из-за неправильно настроенной среды.
Есть ли способ помешать Upstart начать основную работу слишком рано в этом сценарии?
expect stop
похоже, что это близко к тому, что мне нужно, но я не вижу способа поднять это сигнал без завершения одного из демонов, ни один из которых не генерирует сигнал SIGSTOP самостоятельно.
Простой - используйте раздел pre-start
, чтобы выполнить всю вашу проверку sed
. Если pre-start
определяет, что поддерживающий демон не должен быть запущен, вызовите его просто stop
(что заставляет Upstart , а не продолжать запуск задания). Вот пример этого в Книге рецептов Upstart здесь:
http://upstart.ubuntu.com/cookbook/#pre-start
Обратите внимание, что только Upstart выполняет отслеживание PID для разделов exec
и script
(другими словами, «основной» части задания) - идентификаторы PID для pre-start
, post-stop
и др. не отслеживаются. См. http://upstart.ubuntu.com/cookbook/#expect
Решение этой проблемы в конечном итоге заключалось в документации Upstart :
Создайте секцию после запуска, которая выполняет некоторую проверку и возвращается только после того, как служба «готова». .
BLOCKQUOTE>