Szukam standardowego sposobu lub najlepszej praktyki, aby uruchomić demona przez init.d
skrypt powłoki przy życiu.
Lub jeszcze lepiej, czy istnieje sposób, aby utrzymać go przy życiu bezpośrednio /etc/init.d
?
W szczególności mam demona o nazwie dtnd zi nieskończoną pętlę, która szuka nieoczekiwanego zakończenia procesu, jeśli istnieje, demon obudzi ich ponownie. Używam również narzędzia start-stop-demon, aby pozwolić precesowi na uruchomienie od danego użytkownika systemu.
Chcę uruchomić tego demona dtnd od uruchomienia. Aby osiągnąć to zachowanie, stworzyłem skrypt init.d, który „zawija” plik dtnd za pomocą poleceń start, stop i status.
Mam 2 pytania, które chciałbym rozwiązać:
Czy istnieje sposób na utrzymanie niektórych procesów ze skryptu powłoki init.d. Czy jest to standardowa / najlepsza metoda?
Zaleca się utrzymanie procesu przy użyciu nieskończonej pętli? Myślę, że lepiej jest użyć jakiegoś polecenia,
respawn
aby to osiągnąć. To jest poprawne?
Wiem o istnieniu respawn
polecenia. Myślę, że tego potrzebuję, ale nie rozumiem przepływu pracy między /etc/init.d/
i /etc/init
. Czy ktoś może mi pomóc?
Zauważ, że nie mam ani dorobkiewicz inittab (Wolno mi tylko do użytku /etc/init
, /etc/init.d
, cron
i narzędzia systemowe jak start-stop-daemon
. Mam na myśli, tylko narzędzia domyślne)
Dziękuje bardzo za Twój czas!
Odpowiedzi:
Debian w końcu będzie miał systemd, więc jest to sposób na zrobienie tego w systemie Linux, który używa systemd (i wielu już to robi; możesz rozważyć zmianę dystrybucji).
Systemd może obsłużyć automatyczne utrzymanie usługi dla Ciebie; żadne inne narzędzia nie są wymagane. Po prostu upewnij się, że
Restart=always
jest to ustawione w sekcji pliku usługi[Service]
.Dostępnych jest również kilka innych opcji dla bardziej złożonych scenariuszy.
źródło
systemd
wydaje się odrzucićinit.d
skrypt i bazować na*.service
systemctl edit myservice
, a następniesystemctl daemon-reload
uruchom ponownie usługę.Można go dodać do
/etc/inittab
zrespawn
:To brudny hack, ale z powodzeniem korzystałem z niego na starszych systemach sysv-init.
źródło
To jeden z głównych powodów, dla których debian przechodzi na systemd.
sysvinit (/etc/init.d) nie jest w stanie wykryć, czy usługa jest wyłączona / nie odpowiada. Oznacza to, że musisz monitorować te usługi i eskalować, jeśli usługa nie wykona już swojej pracy.
prawdopodobnie najłatwiejszą rzeczą byłoby migrację do innego programu do obsługi demonów, takiego jak systemd (domyślnie w RHEL7, domyślnie w następnym debianie i ubuntu lts), upstart (domyślnie w RHEL6, Ubuntu 12.04 i 14.04), daemontools (jak wspomniano, opracowany przez djb) lub coś innego.
wykonywanie usługi utrzymania przy życiu będzie PITA w sysvinit.
źródło
Najlepszą praktyką jest upewnienie się, że demony NIE ZATRZYMUJĄ SIĘ przede wszystkim.
W przypadku jego braku może chcesz przyjrzeć się DJB za daemontools
źródło
Dla mnie standardowym podejściem jest użycie do tego narzędzia Monit .
Nie mogę do końca powiedzieć z twojego opisu, czy napisałeś coś takiego jak Monit i próbujesz upewnić się, że działa, czy potrzebujesz czegoś, aby obejrzeć stworzonego demona.
źródło