13

我已经用 Python 编写了一个日志记录应用程序,它打算在启动时启动,但是我无法使用Ubuntu 的 Upstart init daemon启动该应用程序。当使用sudo /usr/local/greeenlog/main.pyw从终端运行时,应用程序运行良好。这是我为 Upstart 工作所做的尝试:

/etc/init/greenlog.conf

# greeenlog

description     "I log stuff."

start on startup
stop on shutdown

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

如果这很重要,我的应用程序会启动一个子线程。我已经用expect fork节尝试了这项工作,结果没有任何变化。我也用sudo尝试过这个并且没有脚本语句(只是一个单独的 exec 语句)。在所有情况下,启动后,运行状态 greenlog返回greenlog stop/waiting和 running 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"))

谁能看到我做错了什么?感谢您提供的任何帮助。谢谢。

4

1 回答 1

12

感谢 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

谢谢!

于 2010-04-15T15:21:47.880 回答