Často dochází k samovolnému poklesu služeb. Uživatel se musí vypořádat s jejich ručním obnovením. Pokud k tomu dojde na domácím počítači, není to problém jako takový. Ba co víc - je to dobře, protože je zde reálná možnost zjistit stav služby, identifikovat závady a odstranit je. Situace je však zcela odlišná, pokud jde o servery a služby VPS, které musí pracovat neustále, aby zajistily přístup k webové stránce nebo aplikaci. V tomto článku se podíváme na to, jak nastavit automatický restart linuxových služeb několika způsoby: pomocí monitorovacího skriptu spouštěného pravidelně prostřednictvím cronu a v systemd.
Výchozí nastavení je takové, že systemd se službou v případě jejího pádu nic neudělá. Uživatel však může vždy nakonfigurovat nastavení tak, aby v případě pádu nebo zastavení služby došlo k jejímu automatickému restartu. K tomuto účelu slouží direktiva Restart, kterou je třeba přidat do sekce Service. Dále se podíváme na příklad konfigurace automatického restartu služby Apache:
$ sudo systemctl edit apache2
[Service]
Restart=on-failure
RestartSec=5s
Zde RestartSec určuje, jak dlouho se má čekat před restartováním služby. Po dokončení uložte změny a spusťte příkaz daemon-reload pro opětovné načtení konfigurace:
$ sudo systemctl daemon-reload
Dále zkontrolujte, zda vše funguje správně, podívejte se na stav procesu, ukončete proces signálem kill:
$ sudo systemctl status apache2
$ kill -KILL 32091
Znovu zkontrolujte stav, proces by měl být spuštěn. Chcete-li nastavit, aby se inicializace spouštěla pokaždé, použijte speciální direktivu Restart: always. Při jejím použití byste však měli být velmi opatrní, protože vám neumožní ukončit proces, i když je to nutné. Pokud proces neustále padá, takže se restartuje, můžete do sekce Service přidat omezení počtu restartů:
$ sudo systemctl edit apache2
[Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
Zde StartLimitBurst
a StartLimitIntervalSec
udávají, že je důležité službu restartovat pětkrát, a pokud všech těchto pětkrát spadne, nechat ji být a nesahat na ni. Druhá direktiva omezuje restarty služby na 500 sekund.
Jedná se pravděpodobně o nejspolehlivější a nejbezpečnější metodu, která funguje ve všech verzích Linuxu. V Apache je snadné vytvořit automatický restart pomocí skriptu. K tomu je třeba zadat příkaz:
$ sudo vi /usr/local/bin/apache-monitor.sh
#!/bin/bash
ps -A | grep apache2 || systemctl start apache2
Soubor uložte a nezapomeňte jej učinit spustitelným:
chmod ugo+x /usr/local/bin/apache-monitor.sh
Nezapomeňte přidat položku cron, která bude skript pravidelně spouštět:
$ sudo crontab -e
*/5 * * * * /usr/local/bin/apache-monitor.sh
To je vše. Ano, nastavení automatického restartu služby není tak snadné, jak se na první pohled může zdát. Je to ale důležitá schopnost, takže byste jí měli věnovat pozornost - rozhodně se vyplatí.
Apply the discount by inserting the promo code in the special field at checkout:
Apply the discount by inserting the promo code in the special field at checkout: