Иногда возникает необходимость создать неубиваемый сервис systemd для программ, которые являются целью работы самого сервера. То есть, если сервер включен, то сервис должен работать. Однако же по нехватке памяти программка упадет, бывает, что сам программку случайно закроешь или по какому-то своему внутреннему глюку, бывает, что нужный сервис остановится. Ни разу не подводил nginx, но покажу, что надо делать на его примере. Раньше я делал просто
Код:
ps -ef | grep nginx &>/dev/null || systemctl restart nginx
и втыкал это в крон... Раз в минуту, если в процессах nginx не оказывался, сервис перезапускался.
Есть ряд неудобств, во-первых, минута - это много, во-вторых, нельзя забыть об этом, если сервис остановил сам руками по какой-то причине, и, наконец, если сервис останавливается/запускается больше минуты, то могут быть нюансы.
Решил попробовать сам systemd, его возможности.
Итого, набираем команду
Код:
systemctl edit nginx
открывается окошко с содержимым самого описания юнита/сервиса nginx, но закомментированным.
Нам нужно определить/переопределить только пару параметров, потому вписываем без комментариев
Код:
[Service]
Restart=always
RestartSec=5
это обозначает, что если процесс закроется по ошибке, или без ошибки, или просто kill -9 ему сделаете, то через 5 секунд он запустится снова. Однако, если вы сделаете ему systemctl stop, то он остановится нормально, без каких-либо неожиданностей.