Fizetési módok Abuse

Hogyan végezhetünk automatikus újraindítást egy Linux szolgáltatásban?

26.02.2021, 20:42

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.

Automatikus újraindítás 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

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

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

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

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

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

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.

Automatikus újraindítás szkript által

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.