Czy upstart może obsługiwać dowiązania symboliczne do plików konfiguracyjnych?

30

Mam wszystkie moje pliki konfiguracji upstart pod kontrolą wersji. Mój idealny sposób na użycie upstart to utworzenie miękkich linków z mojego repozytorium kontroli wersji (mercurial - nie ma to znaczenia) do / etc / init, ale upstart nie widzi zadań. Wszystko jest w porządku, jeśli skopiuję pliki z katalogu repozytorium do / etc / init.

Czy ktoś wie, dlaczego upstart nie obsługuje dowiązań symbolicznych, a nawet twardych?

Dzięki

Chris

Chris McCauley
źródło
1
Może deweloperzy Upstart postanowili zignorować miękkie linki? W każdym razie, jeśli twoje repozytorium znajduje się na tej samej partycji co /etc/init, spróbuj użyć twardych linków.
Steven poniedziałek,
Próbowałem twardych linków i to też nie działało :-(
Chris McCauley
Kulawy. Rzeczywiście, dowiązania symboliczne są ignorowane bez ręcznego wywołania w celu przeładowania konfiguracji. Westchnienie. Wolę dowiązania symboliczne. Środek czyszczący w mojej walizce. No cóż. Po prostu skopiuję pliki, jak kretyn.
James T Snell

Odpowiedzi:

9

Upstart nie obsługuje dowiązań symbolicznych, ponieważ mogą wskazywać na plik na partycji, który nie jest ładowany podczas uruchamiania .

Poradziłem sobie z tym w swoim własnym projekcie, umieszczając pliki conf w / etc / init / myscripts, a następnie wiążąc je z katalogiem w moim repozytorium. mount --bind /etc/init/myscripts ~/code/repo/initscripts.

Dodaj to do / etc / fstab, a wiązanie będzie trwałe:

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

To skutecznie daje ci sztywno powiązane katalogi. Upstart będzie traktował pliki conf jak każdy inny, ponieważ są one lokalne dla / etc / init. Twój DVCS będzie również widział je jako pliki lokalne w repozytorium, więc będzie je traktował tak samo, jak wszystkie inne pliki tam przechowywane. Najlepsze z obu światów.

Alexander Garden
źródło
49

Upstart obserwuje katalogi konfiguracyjne z inotify i przeładowuje konfigurację, gdy dowolny plik się zmieni lub zostanie dodany nowy plik. Najwyraźniej nie działa to w przypadku dowiązań symbolicznych.

Aby ręcznie zaktualizować konfigurację, użyj

$ initctl reload-configuration
Fabian Jakobs
źródło
to działało dla mnie niezawodnie. ostatnio w wersji upstart 1.3 działa tylko na zadaniach, które są zatrzymane.
jcomeau_ictx
2
Dla mnie dowiązania symboliczne w / etc / init / work, ale jeśli zmienię plik za dowiązaniem symbolicznym, plik nie zostanie ponownie odczytany przez narzędzia upstart. Kilka godzin zajęło mi odkrycie, że powodem jest link symboliczny. Działa jak pamięć podręczna, której nikt nie chce mieć.
peschü
1

Jak wspomniano wcześniej:

initctl reload-configuration

Jeśli jednak wystąpi błąd podobny do następującego:

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

Musisz wywołać sudo:

sudo initctl reload-configuration
Karl Morrison
źródło