Pomagałem koledze, który miał problemy z procesem w tle umierającym okresowo.
Dowiedziałem się, że zaczynają proces w tle, logując się na serwerze i wykonując:
su - <user> -c '<command>' &
„Aha”, wykrzyknąłem. „Jeśli uruchomisz polecenie za pomocą„ & ”, zawiesi się ono po wyjściu ze sterującego terminalu. Aby to osiągnąć, musisz użyć czegoś takiego jak nohup. Naprawdę ten proces musi obsługiwać działanie jako demon, tut tut.”
Przetestowaliśmy powyższe polecenie, aby wykazać mój punkt widzenia i ... wydawało się, że działa: proces rozpoczęty przez polecenie nie zakończył się, gdy opuściliśmy terminal, który uruchomił powyższe polecenie.
polecenie to niestandardowy skrypt Pythona, którego dane wyjściowe trafiają do pliku. O ile mogę stwierdzić, w skrypcie nie ma inteligentnych możliwości „demonizacji”. Nie wykonuje żadnych czynności potrzebnych do działania jako demon wymieniony na stronie Wikipedia: Daemon (computing): Creation .
Uruchomienie polecenia w ten sposób zachowuje się zgodnie z oczekiwaniami:
<command> &
exit
W powyższym przypadku proces w tle rozpoczęty przez polecenie kończy się, gdy wychodzimy z terminala.
Moje pytanie brzmi:
Co się dzieje, gdy dodamy „su - -c &”, który uniemożliwia zakończenie procesu po wyjściu naszego terminalu. Chciałbym szczegółowo zrozumieć w odniesieniu do terminala sterującego, standardowego wejścia i wyjścia itp.
Czy jest to rozsądny sposób na osiągnięcie celu uruchomienia tego polecenia jako procesu w tle. Jeśli nie to dlaczego?
Chcę promować najlepsze praktyki w mojej firmie, ale muszę być w stanie zademonstrować i poprzeć wszelkie rekomendacje, które przedstawię.
Chcę również zrozumieć, co się dokładnie dzieje.
chroot --userspec root:root / sh -c "exec some_forever_process" &
. Zadanie działa jako ten sam użytkownik, bez wyraźnegonohup
wcześniejszego lubdisown
późniejszego. Więc w takim przypadku, w jaki sposób sygnał nie może zostać dostarczony przy terminie wyjścia?