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

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

2 месяца ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

2 месяца ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

2 месяца ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

2 месяца ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

2 месяца ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

2 месяца ago