Часто відбувається спонтанне падіння сервісу. Користувачеві доводиться займатися їх ручним відновленням. Проблеми як такої немає, якщо це відбувається на домашньому комп'ютері. Навіть більше - це добре, адже з'являється реальна можливість визначити стан сервісу, виявити несправності та усунути їх. Але зовсім інша ситуація, коли йдеться про сервери та VPS сервіси, які мають працювати постійно для забезпечення доступу до вебсайту чи додатку. У цій статті розглянемо спосіб налаштування автоматичного перезапуску сервісу Linux кількома способами: за допомогою скрипта моніторингу, що періодично запускається через cron, і в systemd.
За замовчуванням виставлено, що в разі падіння сервісу Systemd нічого з ним не робитиме. Але користувач завжди може вибудувати налаштування таким чином, щоб у разі падіння або зупинки сервіс автоматично перезапускався. Для цього використовується директива Restart, яку треба додати в секцію Service. Далі розглянемо приклад налаштування автоматичного перезапуску сервісу Apache:
$ sudo systemctl edit apache2
[Service]
Restart=on-failure
RestartSec=5s
Тут RestartSec вказує, скільки чекати перед перезапуском сервісу. Коли завершите роботу, збережіть зміни та виконайте команду daemon-reload, щоб перечитати конфігурацію:
$ sudo systemctl daemon-reload
Далі, щоб перевірити чи все працює справно, подивіться стан процесу, завершіть процес сигналом kill:
$ sudo systemctl status apache2
$ kill -KILL 32091
Ще раз подивіться стан, процес має бути запущений. Для встановлення запуску ініціалізації щоразу, використовуйте спеціальну директиву Restart: always. Але користуватися нею необхідно вкрай обережно, адже вона не дасть змоги завершити процес, навіть якщо в цьому виникне потреба. Якщо процес постійно падає, щоб він перезапускався, можна додати ліміт на кількість перезапусків у секцію Service:
$ sudo systemctl edit apache2
[Service]
StartLimitIntervalSec=500
StartLimitBurst=5
Restart=on-failure
RestartSec=5s
Тут 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
На цьому все. Так, налаштувати автоматичний перезапуск сервісу не так просто, як може здатися на перший погляд. Але це важлива здатність, тому їй необхідно приділити увагу - воно того безперечно варте.