运行 12.04,我有以下新贵工作~/.init/
:
# myjob
start on net-device-up
stop on [!12345]
script
echo ">> hello from user script" >> ~/tmp/upstart.log
end script
重启机器后
service myjob start
# => myjob: unrecognised service
initctl
确实列出了该作业,但是在没有 sudo 的情况下运行它会引发错误:
initctl start myjob
# => initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.100" (uid=1000 pid=13349 comm="initctl start thunderbird ") 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")
我希望能够使用service
或initctl
不使用 来开始工作sudo
。我误解了什么?
谢谢
答案1
几点:
Ubuntu 默认不启用用户作业。请参阅:
创建任何类型的 Upstart 作业后,您无需重新启动——Upstart 会自动检测它们(使用 inotify)。
该
service
命令不是 Upstart 的一部分 — 它是用于操作 SysV 作业的 SystemV 工具。但是,Upstart 提供 SystemV 兼容性,因此 Upstart 系统作业也可以通过 进行操作service
(为了方便)。Upstart 等效命令是start
、stop
和restart
。对于用户作业,您必须使用
start
、stop
和、restart
(或initctl
等效项)。
最后,请注意,用户作业目前非常基础。我们计划在 12.10 中大幅增强它们,但现在请注意:
- Upstart 将运行全部
/bin/sh -e
无论你默认使用哪个 shell,用户作业都会使用。这-e
也很重要(man sh
详情)。 Upstart 只会在用户作业环境中设置一组最小的变量。因此,你应该像
HOME
这样设置变量:env HOME=/home/james
看: