找不到 ~/.init/ 中的用户 upstart 作业

Dav*_*lan 7 upstart services 12.04

运行 12.04,我有以下新贵工作~/.init/

# myjob

start on net-device-up
stop on [!12345]

script

echo ">> hello from user script" >> ~/tmp/upstart.log

end script
Run Code Online (Sandbox Code Playgroud)

重新启动我的机器后

service myjob start
# => myjob: unrecognised service
Run Code Online (Sandbox Code Playgroud)

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")
Run Code Online (Sandbox Code Playgroud)

我希望能够使用serviceinitctl不使用sudo. 我误解了什么?

谢谢

jam*_*unt 12

几点:

  1. 默认情况下,Ubuntu 中不启用用户作业。看:

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

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

  4. 对于用户作业,您必须使用start, stopand, restart(或initctl等价物)。

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

  • 无论您默认使用哪种 shell,Upstart 都将运行所有用户作业/bin/sh -e。这-e也很重要(man sh详情)。
  • Upstart 只会在用户作业环境中设置最少的变量集。因此,您可能应该像HOME这样设置变量:

    env HOME=/home/james

看:

  • 奇怪的是,文档似乎没有提到 _how_ 来启用用户作业,它只提到了配置文件,而且管理员必须这样做。我们不都是管理员吗? (5认同)
  • @ppetraki 您能否发布一个答案,清楚地概述对`/etc/dbus-1/system.d/Upstart.conf` 所做的更改?令人困惑的是,关于这样一个关键系统实用程序的文档是多么模糊和不完整。 (2认同)