Upstart не может определить pid демона

Есть демон mydaemon, у которого не очень приятный интерфейс. Так что mydaemon-parser.py был написан для разбора файлов конфигурации и запуска столько экземпляров mydaemon, сколько необходимо. mydaemon-parser.py используйте subprocess.call() для вызова внешних команд. Я обнаружил, что mydaemon-parser.py разветвлялся 16 раз, чтобы запустить один mydaemon экземпляр. Как выскочка должна определять mydaemon пид. Я хочу использовать выскочку, потому что mydaemon не очень стабильный продукт. Я устал, чтобы начать его после того, как он терпит неудачу. Может быть, есть лучший способ сохранить сервис?

2
задан 07.05.2020, 15:46

1 ответ

Как говорит автор вышеупомянутого ответа, это решение - «уродливый взлом». Взгляните на раздел Upstart Cookbook - instance и посмотрите, сможете ли вы создать файл .conf для отдельных экземпляров mydaemon. Затем, когда вы запустите mydaemon-parser.py, используйте

subprocess.call('initctl start mydaemon INST="SomeNewInstance"')

Код Python должен будет найти способ идентифицировать уникальное значение для «SomeNewInstance».

После этого у вас может быть задание-оболочка без pid, которое, вероятно, запускает mydaemon-parser.py в pre-start script. Эта работа будет иметь start on и stop on строфы.

Тогда проблема заключалась в остановке экземпляров. В кулинарной книге есть предложения для этого. Обратите особое внимание на раздел, озаглавленный «6.14.2 Другой пример экземпляра», и на блок кода, непосредственно предшествующий тому, который предлагает следующее в качестве примера:

initctl list | grep "^foo " | cut -d\( -f2 | cut -d\) -f1 | while read i
do
  sudo stop foo BAR="$i"
done

Я собираюсь опубликовать подобный набор задания, которые я сделал для запуска / остановки кластеров PostgreSQL через Upstart. Когда я это сделаю, я добавлю здесь ссылку , потому что она предоставляет несколько довольно хороших примеров.

1
ответ дан 07.05.2020, 15:47

Теги

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