Kann Upstart mit symbolischen Links zu Konfigurationsdateien umgehen?

30

Ich habe alle meine Upstart-Konfigurationsdateien unter Versionskontrolle. Mein idealer Weg, um upstart zu verwenden, besteht darin, weiche Links aus meinem Versionskontroll-Repository (mercurial - nicht wichtig) in / etc / init zu erstellen, aber upstart sieht die Jobs nicht. Alles ist in Ordnung, wenn ich die Dateien aus dem Repository-Verzeichnis nach / etc / init kopiere.

Weiß jemand, warum Emporkömmling nicht mit symbolischen oder sogar harten Links umgehen kann?

Vielen Dank

Chris

Chris McCauley
quelle
1
Vielleicht war es eine Designentscheidung der Upstart-Entwickler, weiche Links zu ignorieren? Wenn sich Ihr Repository auf derselben Partition wie befindet /etc/init, versuchen Sie auf jeden Fall, feste Links zu verwenden.
Steven Montag
Harte Links ausprobiert und das hat auch nicht funktioniert :-(
Chris McCauley
Lame. Tatsächlich werden Symlinks ohne manuellen Aufruf zum erneuten Laden der Konfiguration ignoriert. Seufzer. Ich bevorzuge Symlinks. Reiniger in meinem Use-Case. Naja. Ich kopiere einfach die Dateien rein, wie ein Idiot.
James T Snell

Antworten:

9

Upstart unterstützt keine Symlinks, da diese möglicherweise auf eine Datei auf einer Partition verweisen, die beim Booten nicht geladen wird .

Ich habe dies in meinem eigenen Projekt umgangen, indem ich die conf-Dateien in / etc / init / myscripts abgelegt und diese dann an ein Verzeichnis in meinem Repository gebunden habe. mount --bind /etc/init/myscripts ~/code/repo/initscripts.

Fügen Sie dies zu / etc / fstab hinzu und die Bindung bleibt bestehen:

/etc/init/myscripts  /home/me/code/repo/initscripts      none    bind

Auf diese Weise erhalten Sie effektiv fest verknüpfte Verzeichnisse. Upstart behandelt die conf-Dateien wie alle anderen, da sie lokal für / etc / init sind. Ihr DVCS sieht sie auch als lokale Dateien im Repo und behandelt sie daher genauso wie alle anderen dort gespeicherten Dateien. Beste aus beiden Welten.

Alexander Garden
quelle
49

Upstart überwacht seine Konfigurationsverzeichnisse mit inotify und lädt die Konfiguration neu, wenn sich eine der Dateien ändert oder eine neue Datei hinzugefügt wird. Anscheinend funktioniert dies nicht für Symlinks.

Um die Konfiguration manuell zu aktualisieren, verwenden Sie

$ initctl reload-configuration
Fabian Jakobs
quelle
das hat früher bei mir zuverlässig funktioniert. In letzter Zeit funktioniert es bei Upstart 1.3 nur für Jobs, die angehalten wurden.
jcomeau_ictx
2
Für mich Symlinks in / etc / init / work, aber wenn ich die Datei hinter dem Symlink ändere, wird die Datei von den Upstart-Tools nicht erneut gelesen. Ich habe Stunden gebraucht, um herauszufinden, dass der Symlink der Grund ist. Es wirkt wie ein Cache, den niemand haben möchte.
peschü
1

Wie schon erwähnt:

initctl reload-configuration

Wenn Sie jedoch einen Fehler wie den folgenden erhalten:

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

Sie müssen das sudo aufrufen:

sudo initctl reload-configuration
Karl Morrison
quelle