MC, 2012
Ilustracja do artykułu: Linux nohup — Jak uruchomić proces w tle jako daemon

Linux nohup — Jak uruchomić proces w tle jako daemon

Co prawda sesja żyć nie daje normalnie, ale pokuszę się o wpis. Tym razem chciałbym zanotować sobie, a także pokazać innym, sposób na uruchomienie programu czy skryptu w tle, tak by działał jako demon (ang. daemon). Wykorzystamy do tego celu polecenie nohup.

Czym są demony?

Demony w systemie, są to procesy pracujące w tle, które nie wymagają interakcji z użytkownikiem. Co prawda jest to dość uproszczona definicja, ale daje ogólne wyobrażenie na poruszony tutaj temat. Naszym zadaniem będzie zrobienie demona z dowolnego programu, czy skryptu (w tym opisie skupimy się na skrypcie).

W czym problem?

Ktoś może powiedzieć, że wystarczy uruchomić program w tle, przez dodatnie znaku & na koniec wywołania. I w dużej mierze ma rację. Wydajmy przykładowe polecenie uruchamiające skrypt jako proces działający w tle:
$ sh dowolnySkrypt.sh &
[1] 8713
Jak widać uruchomiliśmy dowolnySkrypt.sh jako proces działający w tle, który otrzymał PID 8713. Proces oczywiście będzie działał poprawnie, ale demonem nazwać go nie możemy. Dlaczego? A no wystarczy zamknąć dany terminal, by się przekonać, że proces ten zostanie zabity. Prawdziwy demon musi pracować również po wylogowaniu się użytkownika, zatem czegoś tu jeszcze brakuje...

Użyjmy polecenia nohup!

W tym wypadku z pomocą przychodzi nam polecenie nohup, którego zadaniem jest utrzymanie procesu przy życiu, nawet po wylogowani się użytkownika, poprzez ignorowanie sygnałów hangup. Czyli jest to dokładnie to, czego szukamy. Jak powinno wyglądać wywołanie?
$ nohup sh dowolnySkrypt.sh &
[1] 8879
$ nohup: zignorowanie wejścia i dołączenie wyników do `nohup.out'

Tym sposobem, nasz dowolnySkrypt.sh będzie działał w tle systemu jako demon. Powyższy output mówi nam również, że logi z programu w postaci treści wyrzucanych na strumień standardowego wyjścia, będą zapisywane do pliku nohup.out. Oczywiście możemy to dowolnie modyfikować i zapisywać logi czy to do innego pliku, czy zupełnie je zignorować przekierowując je na urządzenie /dev/null. Jeśli interesuje Cię również temat przekierowywania strumieni, polecam poniższe artykuły:
Linux stdin, stdout, stderr — Strumienie i przekierowania I
Linux stdin, stdout, stderr — Strumienie i przekierowania II

Komentarze (2)

Imię:
Treść:
Administrator 2017-05-08 16:10:37
@ziomek - dziękuję uprzejmie, już poprawione :)
ziomek 2017-05-08 13:56:25
Ziomeczku masz literówkę, powinno być: nohup.out