我的所有 upstart 配置文件都处于版本控制之下。我使用 upstart 的理想方式是从我的版本控制存储库(mercurial - 这并不重要)创建软链接至 /etc/init,但 upstart 无法看到作业。如果我将文件从存储库目录复制到 /etc/init,则一切正常。
有人知道为什么 upstart 无法处理符号链接甚至硬链接吗?
谢谢
克里斯
答案1
Upstart 不支持符号链接,因为它们可能指向启动时未加载的分区上的文件。
我在自己的项目中解决了这个问题,将 conf 文件放在 /etc/init/myscripts 中,然后将其绑定到我的存储库中的目录mount --bind /etc/init/myscripts ~/code/repo/initscripts
。
将其添加到 /etc/fstab 并且绑定将会持久:
/etc/init/myscripts /home/me/code/repo/initscripts none bind
这实际上为您提供了硬链接目录。Upstart 将像对待其他文件一样对待 conf 文件,因为它们是 /etc/init 的本地文件。您的 DVCS 也会将它们视为存储库中的本地文件,因此它也会像对待存储在那里的任何其他文件一样对待它们。两全其美。
答案2
Upstart 使用 inotify 监视其配置目录,并在任何文件发生更改或添加新文件时重新加载配置。显然,这对符号链接不起作用。
要手动更新配置,请使用
$ initctl reload-configuration
答案3
正如之前所提:
initctl reload-configuration
但是如果你收到如下错误:
initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.155" (uid=1000 pid=6177 comm="initctl reload-configuration ") interface="com.ubuntu.Upstart0_6" member="ReloadConfiguration" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")
您必须调用 sudo:
sudo initctl reload-configuration