Metody płatności Abuse

Jak wykonać automatyczny restart usługi systemu Linux?

26.02.2021, 20:42

Często dochodzi do spontanicznego zaniku usługi. Użytkownik musi poradzić sobie z ich ręcznym przywróceniem. Nie ma problemu, jeśli dzieje się to na komputerze domowym. Nawet więcej - to dobrze, bo istnieje realna możliwość określenia stanu usługi, zidentyfikowania błędów i ich wyeliminowania. Sytuacja wygląda jednak zupełnie inaczej, jeśli chodzi o serwery i usługi VPS, które muszą działać nieprzerwanie, aby zapewnić dostęp do strony internetowej lub aplikacji. W tym artykule przyjrzymy się, jak skonfigurować automatyczny restart usług Linux na kilka sposobów: za pomocą skryptu monitorującego uruchamianego okresowo przez cron oraz w systemd.

Automatyczny restart w systemd

Domyślnym ustawieniem jest to, że systemd nie zrobi nic z usługą, jeśli ulegnie ona awarii. Użytkownik może jednak zawsze skonfigurować ustawienia w taki sposób, aby w przypadku awarii lub zatrzymania usługi była ona automatycznie uruchamiana ponownie. Do tego celu służy dyrektywa Restart, którą należy dodać do sekcji Service. Następnie przyjrzyjmy się przykładowi konfiguracji automatycznego restartu usługi Apache:

$ sudo systemctl edit apache2

[Service]

Restart=on-failure

RestartSec=5s

настройка автоматического перезапуска сервиса Apache:

Tutaj RestartSec określa czas oczekiwania przed ponownym uruchomieniem usługi. Po zakończeniu zapisz zmiany i uruchom polecenie daemon-reload, aby ponownie odczytać konfigurację:

$ sudo systemctl daemon-reload

Następnie, aby sprawdzić, czy wszystko działa poprawnie, spójrz na stan procesu, zakończ proces sygnałem kill:

 $ sudo systemctl status apache2

$ kill -KILL 32091

Процесс сигналом kill

Sprawdź ponownie stan, proces powinien być uruchomiony. Aby ustawić uruchamianie inicjalizacji za każdym razem, należy użyć specjalnej dyrektywy Restart: always. Należy jednak być bardzo ostrożnym podczas korzystania z niej, ponieważ nie pozwoli ona na zakończenie procesu, nawet jeśli jest to konieczne. Jeśli proces ciągle się zawiesza, przez co jest restartowany, można dodać limit liczby restartów do sekcji Service:

$ sudo systemctl edit apache2

[Service]

StartLimitIntervalSec=500

StartLimitBurst=5

Restart=on-failure

RestartSec=5s

Лимит на количество перезапусков в секцию Service

Tutaj StartLimitBurst i StartLimitIntervalSec wskazują, jak ważne jest ponowne uruchomienie usługi pięć razy, a jeśli zawiesi się wszystkie te pięć razy, aby zostawić ją w spokoju i nie dotykać. Druga dyrektywa ogranicza restarty usługi do 500 sekund.

Automatyczny restart przez skrypt

Jest to prawdopodobnie najbardziej niezawodna i bezpieczna metoda, która działa we wszystkich wersjach Linuksa. W Apache łatwo jest zbudować automatyczny restart za pomocą skryptu. Aby to zrobić, należy wprowadzić polecenie:

$  sudo vi /usr/local/bin/apache-monitor.sh

#!/bin/bash

ps -A | grep apache2 || systemctl start apache2

Zapisz plik i upewnij się, że jest wykonywalny:

chmod ugo+x /usr/local/bin/apache-monitor.sh

Nie zapomnij dodać wpisu cron, aby okresowo uruchamiać skrypt:

$ sudo crontab -e

*/5 * * * * /usr/local/bin/apache-monitor.sh

To wszystko. Tak, skonfigurowanie automatycznego restartu usługi nie jest tak proste, jak mogłoby się wydawać na pierwszy rzut oka. Jest to jednak ważna umiejętność, więc warto poświęcić jej trochę uwagi.