Нужна помощь при запуске приложения Python в качестве службы в Ubuntu с помощью Upstart
Я написал приложение для регистрации в Python, которое предназначено для запуска при загрузке, но я не смог запустить приложение с Ubuntu Upstart init daemon. При запуске с терминала с sudo/usr/local/greeenlog/main.pyw приложение работает отлично. Вот что я пробовал для работы Upstart:
/etc/init/greeenlog.conf
# greeenlog
description "I log stuff."
start on startup
stop on shutdown
script
exec /usr/local/greeenlog/main.pyw
end script
Мое приложение запускает один дочерний поток, в случае, если это важно. Я пробовал работу с строкой ожидаем fork без каких-либо изменений в результатах. Я также пробовал это с помощью sudo и без операторов script (только один оператор exec). Во всех случаях, после загрузки, запуск статуса greeenlog возвращает greeenlog stop/waiting и запуск start greeenlog возвращает:
start: Rejected send message, 1 matched rules; type="method_call", sender=":1.61" (uid=1000 pid=2496 comm="start) interface="com.ubuntu.Upstart0_6.Job" member="Start" error name="(unset)" requested_reply=0 destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init"))
Может ли кто-нибудь увидеть, что я делаю неправильно? Я ценю любую помощь, которую вы можете дать. Спасибо.
Ответы
Ответ 1
Благодаря помощи unutbu, я смог исправить свою работу. По-видимому, это единственные переменные среды, которые устанавливают Upstart (извлеченные в Python с os.environ):
{'TERM': 'linux', 'PWD': '/', 'UPSTART_INSTANCE': '', 'UPSTART_JOB': 'greeenlog', 'PATH': '/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/sbin:/bin'}
Моя программа зависит от установки пары этих переменных, поэтому здесь приведено исправленное задание с правильными переменными окружения:
# greeenlog
description "I log stuff."
start on startup
stop on shutdown
env DISPLAY=:0.0
env GTK_RC_FILES=/etc/gtk/gtkrc:/home/greeenguru/.gtkrc-1.2-gnome2
script
exec /usr/local/greeenlog/main.pyw > /tmp/greeenlog.out 2>&1
end script
Спасибо!