Palveluihin tulee usein spontaaneja keskeytyksiä. Käyttäjän on huolehdittava niiden manuaalisesta palauttamisesta. Ei sinänsä ole ongelma, jos se tapahtuu kotitietokoneella. Vielä enemmän - se on hyvä, koska on todellinen mahdollisuus määrittää palvelun tila, tunnistaa viat ja poistaa ne. Tilanne on kuitenkin aivan toinen, kun kyse on palvelimista ja VPS-palveluista, joiden on toimittava jatkuvasti, jotta verkkosivusto tai sovellus olisi käytettävissä. Tässä artikkelissa tarkastelemme, miten Linux-palveluiden automaattinen uudelleenkäynnistys voidaan määrittää useilla eri tavoilla: cronin kautta säännöllisesti ajettavalla valvontaskriptillä ja systemd:ssä.
Oletusasetus on, että Systemd ei tee palvelulle mitään, jos se kaatuu. Käyttäjä voi kuitenkin aina määrittää asetukset siten, että palvelun kaatuessa tai pysähtyessä palvelu käynnistyy automaattisesti uudelleen. Tätä varten käytetään Restart-direktiiviä, joka on lisättävä Service-osioon. Tarkastellaan seuraavaksi esimerkkiä Apache-palvelun automaattisen uudelleenkäynnistyksen määrittämisestä:
$ sudo systemctl edit apache2
[Service]
Restart=on-failure
RestartSec=5s
Tässä RestartSec määrittää, kuinka kauan odotetaan ennen palvelun uudelleenkäynnistystä. Kun olet valmis, tallenna muutokset ja suorita komento daemon-reload lukeaksesi asetukset uudelleen:
$ sudo systemctl daemon-reload
Seuraavaksi voit tarkistaa, toimiiko kaikki oikein, tarkastella prosessin tilaa, lopettaa prosessin kill-signaalilla:
$ sudo systemctl status apache2
$ kill -KILL 32091
Tarkista tila uudelleen, prosessin pitäisi olla käynnissä. Jos haluat asettaa alustuksen suoritettavaksi joka kerta, käytä erityisdirektiiviä Restart: always. Sinun on kuitenkin oltava hyvin varovainen käyttäessäsi sitä, koska se ei salli prosessin lopettamista, vaikka se olisi välttämätöntä. Jos prosessi kaatuu jatkuvasti, joten se käynnistetään uudelleen, voit lisätä rajoituksen uudelleenkäynnistysten määrälle Service-osiossa:
$ sudo systemctl edit apache2
[Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
Tässä StartLimitBurst
ja StartLimitIntervalSec
ilmoittavat, kuinka tärkeää on, että palvelu käynnistetään uudelleen viisi kertaa, ja jos se kaatuu kaikki nämä viisi kertaa, jätä se rauhaan eikä siihen saa koskea. Toinen direktiivi rajoittaa palvelun uudelleenkäynnistyksen 500 sekuntiin.
Tämä on luultavasti luotettavin ja vikasietoisin menetelmä, joka toimii kaikissa Linux-versioissa. Apachessa on helppo rakentaa automaattinen uudelleenkäynnistys skriptin avulla. Tätä varten sinun on syötettävä komento:
$ sudo vi /usr/local/bin/apache-monitor.sh
#!/bin/bash
ps -A | grep apache2 || systemctl start apache2
Tallenna tiedosto ja muista tehdä siitä suoritettava:
chmod ugo+x /usr/local/bin/apache-monitor.sh
Älä unohda lisätä cron-merkintää skriptin ajamiseksi säännöllisesti:
$ sudo crontab -e
*/5 * * * * /usr/local/bin/apache-monitor.sh
Siinä kaikki. Kyllä, palvelun automaattisen uudelleenkäynnistyksen määrittäminen ei ole niin helppoa kuin miltä se saattaa ensi silmäyksellä näyttää. Se on kuitenkin tärkeä kyky, joten siihen kannattaa kiinnittää huomiota - se on ehdottomasti sen arvoista.