在 ~/.init/ 中未找到用户 upstart 作业

在 ~/.init/ 中未找到用户 upstart 作业

运行 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")

我希望能够使用serviceinitctl不使用 来开始工作sudo。我误解了什么?

谢谢

答案1

几点:

  1. Ubuntu 默认不启用用户作业。请参阅:

  2. 创建任何类型的 Upstart 作业后,您无需重新启动——Upstart 会自动检测它们(使用 inotify)。

  3. service命令不是 Upstart 的一部分 — 它是用于操作 SysV 作业的 SystemV 工具。但是,Upstart 提供 SystemV 兼容性,因此 Upstart 系统作业也可以通过 进行操作service(为了方便)。Upstart 等效命令是startstoprestart

  4. 对于用户作业,您必须使用startstop和、restart(或initctl等效项)。

最后,请注意,用户作业目前非常基础。我们计划在 12.10 中大幅增强它们,但现在请注意:

  • Upstart 将运行全部/bin/sh -e无论你默认使用哪个 shell,用户作业都会使用。这-e也很重要(man sh详情)。
  • Upstart 只会在用户作业环境中设置一组最小的变量。因此,你应该像HOME这样设置变量:

    env HOME=/home/james

看:

相关内容