Categories: Server Linux

Автозапуск упавшего сервиса в systemd

Достаточно часто бывает необходимость не позволять сервисам падать «наглухо», а рестартовать их в случае аварийного завершения. Systemd позволяет это сделать достаточно просто.

Рассмотрим в качестве примера древний сервис php5-fpm:

systemctl status php5-fpm.service_x000D_● php5-fpm.service - The PHP FastCGI Process Manager_x000D_ Loaded: loaded (/lib/systemd/system/php5-fpm.service; enabled; vendor preset: enabled)_x000D_ Active: active (running) since Wed 2021-06-30 10:14:55 MSK; 12h ago_x000D_ Process: 9349 ExecStartPre=/usr/lib/php5/php5-fpm-checkconf (code=exited, status=0/SUCCESS)_x000D_ Main PID: 9354 (php5-fpm)_x000D_ Status: "Processes active: 0, idle: 5, Requests: 499, slow: 0, Traffic: 0req/sec"_x000D_ Tasks: 6 (limit: 4700)_x000D_ Memory: 857.9M_x000D_ CGroup: /system.slice/php5-fpm.service_x000D_  ├─ 9354 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)_x000D_  ├─ 9357 php-fpm: pool web19_x000D_  ├─ 9358 php-fpm: pool web19_x000D_  ├─ 9359 php-fpm: pool www_x000D_  ├─ 9360 php-fpm: pool www_x000D_  └─20671 php-fpm: pool www_x000D_

Открываем на редактирование файл /lib/systemd/system/php5-fpm.service и видим обычное содержимое:

_x000D_[Unit]_x000D_Description=The PHP FastCGI Process Manager_x000D_After=network.target_x000D__x000D_[Service] _x000D_Type=notify_x000D_PIDFile=/var/run/php5-fpm.pid_x000D_ExecStartPre=/usr/lib/php5/php5-fpm-checkconf_x000D_ExecStart=/usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf_x000D_ExecReload=/bin/kill -USR2 $MAINPID_x000D__x000D_[Install]_x000D_WantedBy=multi-user.target_x000D_

В случае некорректного завершения его работы, он не перезапустится автоматически и сайты, которые он ещё обслуживает, будут недоступны. Чтобы сервис перезапустился автоматически, нужно в секцию Unit добавить следующий строки:

_x000D_StartLimitIntervalSec=500_x000D_StartLimitBurst=5_x000D_

А в секцию Service добавить:

_x000D_Restart=on-failure_x000D_RestartSec=5s_x000D_

После добавления нужно заставить systemd перечитать конфиги:

systemctl daemon-reload

И теперь, если сервис вдруг остановится по незапланированным причинам, в течение 5 секунд он будет перезапущен. Попыток рестарта сервиса будет 5 в течение 500 секунд и если все эти попытки закончатся неудачей, дальнейших попыток перезапуска не будет. Этого времени должно хватить сисадмину, чтобы среагировать на проблему вручную.

admin

Share
Published by
admin

Recent Posts

Настройка Mercurial по HTTPS

Иногда mercurial, при скачивании и комитах ругается на https. Особенно на самоподписанные сертификаты. Чтобы заработал…

4 дня ago

Компиляция libvirt в Ubuntu

Компиляция libvirt Подробнее

4 дня ago

Ошибка libvirt permission denied: решение

Если возникает ошибка libvirt destroy lxc permission denied , при попытке остановить контейнер: _x000D_# virsh…

4 дня ago

Настройка редиректа в NGINX

Файлы с примерами редиректа для nginx Подробнее

4 дня ago

Включение gzip в NGINX

Как включить gzip сжатие в Nginx ? Подробнее

4 дня ago

Удаление postinst-скрипта в Linux

Иногда возникает ситуация, когда криво настроенные пакеты не устанавливаются в системе. У меня это произошло…

4 дня ago