Gyakran előfordul, hogy spontán csökken a szolgáltatás. A felhasználónak kézi helyreállításukkal kell foglalkoznia. Nem jelent problémát, ha ez egy otthoni számítógépen történik. Sőt - ez jó, mert valódi lehetőség van a szolgáltatás állapotának meghatározására, a hibák azonosítására és kiküszöbölésére. A helyzet azonban egészen más, ha szerverekről és VPS-szolgáltatásokról van szó, amelyeknek folyamatosan működniük kell, hogy hozzáférést biztosítsanak egy weboldalhoz vagy alkalmazáshoz. Ebben a cikkben megnézzük, hogyan lehet a Linux-szolgáltatások automatikus újraindítását többféleképpen beállítani: egy cronon keresztül periodikusan futtatott felügyeleti szkript segítségével és a systemd-ben.
Az alapértelmezett beállítás szerint a systemd nem tesz semmit a szolgáltatással, ha az összeomlik. A felhasználó azonban bármikor konfigurálhatja a beállításokat úgy, hogy a szolgáltatás összeomlása vagy leállása esetén a szolgáltatás automatikusan újrainduljon. Erre a célra a Restart direktíva szolgál, amelyet a Service szakaszhoz kell hozzáadni. A következőkben nézzünk egy példát az Apache szolgáltatás automatikus újraindításának beállítására:
$ sudo systemctl edit apache2
[Service]
Restart=on-failure
RestartSec=5s
Itt a RestartSec adja meg, hogy mennyi ideig várjon a szolgáltatás újraindítása előtt. Ha végzett, mentse el a módosításokat, és futtassa a daemon-reload parancsot a konfiguráció újbóli beolvasásához:
$ sudo systemctl daemon-reload
Ezután, hogy ellenőrizze, hogy minden megfelelően működik-e, nézze meg a folyamat állapotát, a folyamatot kill jellel fejezze be:
$ sudo systemctl status apache2
$ kill -KILL 32091
Ellenőrizze újra az állapotot, a folyamatnak futnia kell. Az inicializálás minden alkalommal történő lefutásának beállításához használjunk egy speciális utasítást Restart: always. De nagyon óvatosnak kell lenned a használatával, mert nem engedi meg a folyamat befejezését, még akkor sem, ha szükséges. Ha a folyamat állandóan összeomlik, ezért újra kell indítani, akkor a Service szakaszban megadhat egy korlátot az újraindítások számára:
$ sudo systemctl edit apache2
[Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
Itt a StartLimitBurst
és a StartLimitIntervalSec
jelzi, hogy a szolgáltatás ötször induljon újra, és ha mind az ötször összeomlik, akkor hagyja békén, és ne nyúljon hozzá. A második utasítás 500 másodpercre korlátozza a szolgáltatás újraindítását.
Valószínűleg ez a legmegbízhatóbb és leghibabiztosabb módszer, amely a Linux minden verziójában működik. Az Apache-ban könnyű automatikus újraindítást készíteni egy szkript segítségével. Ehhez a parancsot kell beírni:
$ sudo vi /usr/local/bin/apache-monitor.sh
#!/bin/bash
ps -A | grep apache2 || systemctl start apache2
Mentsd el a fájlt, és mindenképpen tedd futtathatóvá:
chmod ugo+x /usr/local/bin/apache-monitor.sh
Ne felejtsen el hozzáadni egy cron bejegyzést a szkript rendszeres futtatásához:
$ sudo crontab -e
*/5 * * * * /usr/local/bin/apache-monitor.sh
Ennyi. Igen, a szolgáltatás automatikus újraindításának beállítása nem olyan egyszerű, mint amilyennek elsőre tűnik. De ez egy fontos képesség, ezért érdemes odafigyelni rá - mindenképpen megéri.