Способи оплати 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

На цьому все. Так, налаштувати автоматичний перезапуск сервісу не так просто, як може здатися на перший погляд. Але це важлива здатність, тому їй необхідно приділити увагу - воно того безперечно варте.