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