Небольшая заметка о том, как настроить автоматический перезапуск любого 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 будет перезапускать сервис через заданный промежуток времени каждый раз, когда тот будет падать. Для проверки можно вручную поприбивать процесс сервиса и убедиться в том, что автоматический перезапуск работает.