Новомодное задание не умирает правильно

Я делаю простого новомодного демона.

После Новомодной документации [1] я делаю conf сценарий:

description "Super Daemon" 
author "Bastian Baltasar Bux"

start on started dbus
stop on runlevel [06]

expect fork
exec /usr/bin/my-daemon

Сценарий /usr/bin/my-daemon удар, которые называют Python. Сценарий Python регистрирует информацию в/var/log файле. На том сценарии Python я только делаю a fork. Но то, когда я проверяю, что ветвлениям нравится, говорит в Новомодном документе [2], в методе говорится, что я делаю дважды ветвления.

С этим всем задание запуска выполняется правильно, но pid показал с upstart my-daemon status не то же, которое находится в файле журнала. Ошибка появляется, когда я пытаюсь прекратить делать status my-daemon stop. Та команда не заканчивается, я должен для окончания с Crtl-C.

Я пытался измениться expect fork кому: expect daemon но сервисная остановка не делает концов ни один.

Когда могла быть проблема?

[1] http://upstart.ubuntu.com/cookbook

[2] http://upstart.ubuntu.com/cookbook/#id158

2
задан 10 June 2013 в 16:40

1 ответ

Я заметил, что вы уже устранили проблему, исправив строку exec. Для будущих читателей давайте подведем итоги проблемы и исправления.

Проблема : Запуск разветвленного питона из сценария bash из задания Upstart не отслеживается правильно.

Проблема : expect fork или expect daemon не решают проблему.

Решение : Исправить скрипт. Опции:

  • Переключиться с exec /usr/bin/my-bash-wrapper на прямой вызов python exec python /path/to/script (как показано в комментариях выше)

  • Исправить скрипт bash. Наличие сценария bash с примером содержимого

#!/bin/bash

python /path/to/script

приводит к тому, что python выполняется отдельно от bash с новым идентификатором процесса. Таким образом, он игнорируется Upstart, поскольку это просто команда, созданная сценарием Bash. Добавление expect daemon не помогает, так как в первую очередь игнорируется.

Использование сценария bash возможно так же, как вы исправили его в сценарии Upstart. Префикс вызова Python с exec заставляет Python работать с тем же PID, что и bash, который отслеживается Upstart. Затем expect fork перехватывает fork () в скрипте Python, и Upstart с радостью отслеживает правильный процесс.

Таким образом, использование оболочки оболочки bash:

#!/bin/bash

exec python /path/to/script

делает то же самое.

0
ответ дан 10 June 2013 в 16:40

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

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