Автоматический перезапуск NGINX в случае сбоя/падения

Используемая ОС — Ubuntu 18.04, веб-сервис — NGINX.

Открываем на редактирование конфигурационный файл сервиса (демона) по адресу /lib/systemd/system/nginx.service следующей командой:

sudo nano /lib/systemd/system/nginx.service

и видим примерно следующее:

# Stop dance for nginx
# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed

[Install]
WantedBy=multi-user.target

В конец раздела [Service] необходимо добавить строки

Restart=always
RestartSec=2

чтобы получилось следующее:


# =======================
#
# ExecStop sends SIGSTOP (graceful stop) to the nginx process.
# If, after 5s (--retry QUIT/5) nginx is still running, systemd takes control
# and sends SIGTERM (fast shutdown) to the main process.
# After another 5s (TimeoutStopSec=5), and if nginx is alive, systemd sends
# SIGKILL to all the remaining processes in the process group (KillMode=mixed).
#
# nginx signals reference doc:
# http://nginx.org/en/docs/control.html
#
[Unit]
Description=A high performance web server and a reverse proxy server
Documentation=man:nginx(8)
After=network.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -q -g 'daemon on; master_process on;'
ExecStart=/usr/sbin/nginx -g 'daemon on; master_process on;'
ExecReload=/usr/sbin/nginx -g 'daemon on; master_process on;' -s reload
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid
TimeoutStopSec=5
KillMode=mixed
Restart=always
RestartSec=2

[Install]
WantedBy=multi-user.target

В строке RestartSec=2 указывается время в секундах, через которое будет выполнена попытка перезапустить сервис; в нашем примере этот промежуток равен двум секундам.

Сохраняем изменения, выходим из редактора и перезапускаем демон, чтобы применились новые настройки конфигурации, следующей командой:

sudo systemctl daemon-reload

Теперь, в случае неожиданного/несанкционированного «падения веб-сервера», сервис nginx перезапустится автоматически через указанное Вами количество секунд.

Всё готово!

Об авторе admin

Аватар