Как предотвратить условия гонки в сценариях «запуска на Upstart»?

Я работаю над пакетом, который нуждается в двух заданиях Upstart: одно, которое запускает демон, и другое, которое запускает вспомогательный демон , если файл конфигурации требует этого. Логика определения того, следует ли запускать поддерживающий демон, включает обработку файла конфигурации с sed и друзьями, что вызывает проблемы с обнаружением демонизации в Upstart (Upstart не может различить PID), поэтому expect fork и expect daemon aren ' т полезно. К сожалению, это означает, что Upstart обнаруживает первый вызов sed в качестве первого PID и немедленно запускает основное задание, прежде чем вспомогательный демон полностью инициализируется. Это часто приводит к преждевременному прекращению основной работы из-за неправильно настроенной среды.

Есть ли способ помешать Upstart начать основную работу слишком рано в этом сценарии?

expect stop похоже, что это близко к тому, что мне нужно, но я не вижу способа поднять это сигнал без завершения одного из демонов, ни один из которых не генерирует сигнал SIGSTOP самостоятельно.

2
задан 12 July 2012 в 19:30

2 ответа

Простой - используйте раздел 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

.
0
ответ дан 12 July 2012 в 19:30

Решение этой проблемы в конечном итоге заключалось в документации Upstart :

Создайте секцию после запуска, которая выполняет некоторую проверку и возвращается только после того, как служба «готова». .

0
ответ дан 12 July 2012 в 19:30

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

Похожие вопросы: