新贵可以处理指向配置文件的符号链接吗?


30

我的所有新贵配置文件都在版本控制下。我使用upstart的理想方法是从版本控制存储库(Mercurial-无关紧要)创建到/ etc / init的软链接,但是upstart无法看到作业。如果我将文件从存储库目录复制到/ etc / init,一切都很好。

有人知道为什么暴发户无法处理符号甚至硬链接吗?

谢谢

克里斯


1
也许这是Upstart开发人员忽略软链接的设计决定?无论如何,如果您的存储库与处于同一分区/etc/init,请尝试使用硬链接。
史蒂文

尝试了硬链接,但也没有用:-(
克里斯·麦考利

瘸。实际上,无需手动调用即可重新加载配置,而忽略符号链接。叹。我更喜欢符号链接。在我的用例中更清洁。那好吧。我将像混蛋一样将文件复制到其中。
James T Snell 2014年

Answers:


9

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

这有效地为您提供了硬链接目录。新贵会将conf文件与其他文件一样对待,因为它们在/ etc / init中是本地的。您的DVCS还将在存储库中将它们视为本地文件,因此也将像对待存储在其中的任何其他文件一样对待它们。两全其美。


49

Upstart使用inotify监视其配置目录,并在任何文件更改或添加新文件时重新加载配置。显然,这不适用于符号链接。

手动更新配置使用

$ initctl reload-configuration

这曾经为我可靠地工作。最近在新贵1.3版中,它仅适用于已停止的作业。
jcomeau_ictx 2014年

2
对我来说,/ etc / init /中的符号链接有效,但是如果我更改符号链接后面的文件,则新贵工具不会重新读取该文件。我花了几个小时才发现符号链接是原因。它就像没有人想要的缓存一样。
peschü

1

正如先前所说:

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.