Начини на плащане Abuse

Как да извършим автоматично рестартиране на услуга на Linux

26.02.2021, 20:42

Често се случват спонтанни сривове на услугата. Потребителят трябва да се справи с ръчното им възстановяване. Няма проблем като такъв, ако това се случи на домашен компютър. Нещо повече - това е добре, защото има реална възможност да се определи състоянието на услугата, да се идентифицират неизправностите и да се отстранят. Но ситуацията е съвсем различна, когато става въпрос за сървъри и VPS услуги, които трябва да работят постоянно, за да осигурят достъп до даден уебсайт или приложение. В тази статия ще разгледаме как да конфигурираме автоматичното рестартиране на Linux услуги по няколко начина: със скрипт за наблюдение, изпълняван периодично чрез cron, и в systemd.

Автоматично рестартиране в systemd

Настройката по подразбиране е Systemd да не прави нищо с услугата, ако тя се срине. Но потребителят винаги може да конфигурира настройките по такъв начин, че в случай на срив или спиране на услугата тя да бъде автоматично рестартирана. За тази цел се използва директивата Restart (Рестартиране), която трябва да се добави в раздела Service (Служба). След това нека разгледаме пример за конфигуриране на автоматичното рестартиране на услугата Apache:

$ sudo systemctl edit apache2

[Service]

Restart=on-failure

RestartSec=5s

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

Тук RestartSec указва колко време да се изчака, преди да се рестартира услугата. Когато приключите, запазете промените и изпълнете командата daemon-reload, за да прочетете отново конфигурацията:

$ sudo systemctl daemon-reload

След това, за да проверите дали всичко работи правилно, разгледайте състоянието на процеса, прекратете процеса със сигнал kill:

 $ sudo systemctl status apache2

$ kill -KILL 32091

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

Проверете състоянието отново, процесът трябва да работи. За да настроите инициализацията да се изпълнява всеки път, използвайте специалната директива Restart: always (Рестартиране: винаги). Но трябва да сте много внимателни, когато я използвате, защото тя няма да ви позволи да прекратите процеса, дори ако това е необходимо. Ако процесът постоянно се срива, така че да бъде рестартиран, можете да добавите ограничение на броя на рестартите в раздела Service (Услуга):

$ sudo systemctl edit apache2

[Service]

StartLimitIntervalSec=500

StartLimitBurst=5

Restart=on-failure

RestartSec=5s

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

Тук StartLimitBurst и StartLimitIntervalSec указват значението на рестартирането на услугата пет пъти и ако тя се срине всичките тези пет пъти, да я оставите на мира и да не я докосвате. Втората директива ограничава рестартирането на услугата до 500 секунди.

Автоматично рестартиране чрез скрипт

Това е вероятно най-надеждният и сигурен метод, който работи във всички версии на Linux. В Apache е лесно да се изгради автоматично рестартиране с помощта на скрипт. За да направите това, трябва да въведете командата:

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

#!/bin/bash

ps -A | grep apache2 || systemctl start apache2

Запишете файла и не забравяйте да го направите изпълним:

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

Не забравяйте да добавите запис за cron, който да изпълнява скрипта периодично:

$ sudo crontab -e

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

Това е всичко. Да, настройването на автоматично рестартиране на услугата не е толкова лесно, колкото изглежда на пръв поглед. Но това е важна способност, така че трябва да ѝ обърнете внимание - определено си заслужава.