Co zrobić aby program był cały czas uruchomiony?

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.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

To prevent spam, URLs are not allowed in comments. All comments are moderated and subject to approval.
Aby zapobiec spamowi, adresy URL nie są dozwolone w komentarzach. Wszystkie komentarze są moderowane i podlegają zatwierdzeniu.