Автоперезапуск упавших сервисов Systemd

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

Небольшая заметка о том, как настроить автоматический перезапуск любого systemd-сервиса в случае его падения не важно по какой причине.

Упасть сервис может по множеству причин, например из-за внутренней ошибки или в случае прибития его мемкиллером. С такой проблемой я столкнулся на Raspberry Pi, когда MariaDB у меня периодически падала/выносилась earlyoom, с точной причиной я не разбирался. Там условия спартанские, оперативной памяти всего 1 Гб, поэтому вместо стратегии удержания любой ценой процесса в памяти я выбрал стратегию перезапуска сервиса MariaDB когда по каким-либо причинам его выносило.

Делается это редактированием нескольких строк в файле systemd-юнита сервиса. В терминале выполняем:

sudo EDITOR=NANO systemctl edit service_name.service

Заменяем «service_name» на имя нужного сервиса, например «sudo EDITOR=NANO systemctl edit mariadb.service».

После строки «### Anything between here and the comment below will become the new contents of the file» добавляем следующее содержимое:

[Service] 
Restart=always 
RestartSec=5s

Параметром «RestartSec» можно задать таймаут, спустя который сервис будет перезапущен. Сохраняем изменения и выходим: CTRL+O -> ENTER -> CTRL+X. Далее применяем новую конфигурацию юнита:

sudo systemctl daemon-reload

Вот, в общем-то, и всё. Теперь Systemd будет перезапускать сервис через заданный промежуток времени каждый раз, когда тот будет падать. Для проверки можно вручную поприбивать процесс сервиса и убедиться в том, что автоматический перезапуск работает.