Нужна помощь в запуске приложения Python как службы в Ubuntu с Upstart - PullRequest
13 голосов
/ 15 апреля 2010

Я написал приложение для ведения журнала на Python, которое должно запускаться при загрузке, но я не смог запустить приложение с помощью Ubuntu Upstart init daemon . При запуске из терминала с sudo /usr/local/greeenlog/main.pyw приложение работает отлично. Вот что я попробовал для работы Upstart:

/ и т.д. / инициализации / greeenlog.conf

# greeenlog

description     "I log stuff."

start on startup
stop on shutdown

script
    exec /usr/local/greeenlog/main.pyw
end script

Мое приложение запускает один дочерний поток, если это важно. Я пробовал работу с ожидаемым форком строфа без каких-либо изменений в результатах. Я также попробовал это с sudo и без операторов скрипта (просто одинокий оператор exec). Во всех случаях после загрузки выполняется состояние greeenlog возвращает остановка / ожидание greeenlog и работает запуск 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 Ответ

12 голосов
/ 15 апреля 2010

Благодаря помощи 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

Спасибо!

...