Czasami chcemy aby jakiś program działał cały czas, a po jego zamknięciu np. z powodu błędu lub restartu systemu następowało ponowne uruchomienie tego programu. Okazuje się, że jest na to sposób. cron
będzie narzędziem które nam w tym pomoże. Uruchomienie programu po restarcie systemu możemy sobie zagwarantować dopisując w crontab
:
@reboot NAZWA_PROGRAMU
W celu edycji edycji tabeli programu cron
możemy użyć programu contab
:
crontab -e
Parametr -e
oznacza, że chcemy edytować tabelę, aby sprawdzić jej zawartość bez otwarcia edytora wystarczy użyć -l
.
Pozostaje jednak do zrobienia uruchamianie programu w przypadku jego zamknięcia. W tym celu również możemy skorzystać harmonogramu zadań.
Uruchamiamy crontab
i w edytorze który się otworzy dopisujemy:
* * * * * pgrep NAZWA_PROGRAMU > /dev/null || NAZWA_PROGRAMU
Zapisujemy plik i zamykamy edytor.
Dopisany kod powoduje wywoływanie co minutę programu pgrep
. Program ten wyszukuje (po nazwie) procesy na podstawie podanego jako parametr wyrażenia regularnego, na standardowe wyjście zwraca identyfikatory znalezionych procesów. W przypadku nieznalezienia procesów zwraca kod błędu 1. Możliwe są też inne kody błędów:
- 2 – błąd składni w poleceniu
- 3 – błąd krytyczny: brak pamięci itp.
W sytuacji, gdy działanie pgrep
zakończy się kodem błędu nastąpi uruchomienie naszego programu (NAZWA_PROGRAMU
).
Przy dobrze wpisanym poleceniu pgrep
nie zakończy się z kodem wyjścia 2. Jeśli pgrep
wcześniej działał to zakończenie z kodem 3 jest mało prawdopodobne, a jeśli już to będzie to najprawdopodobniej spowodowane poważnymi problemami systemu – jeśli np. braknie pamięci to i tak otworzenie programu nie powiedzie się wiec nie otrzymamy dwóch jednocześnie działających. Oczywiście można sprawdzać z jakim kodem wyjścia zakończył się pgrep
i uruchamiać nasz program jedynie przy kodzie 1. Jednak zastosowane uproszczenie wydaje się być wystarczające.
Biorąc pod uwagę, że sprawdzanie działania programu następuje co minutę nie musimy dodatkowo używać @reboot
.