Как сделать так, чтобы служба со статусом failed (неудачный запуск) перезапускалась автоматически?
По умолчанию службы помечаются как failed (не удалось) в случае пяти последовательных неудачных запусков в течение десяти секунд.
cat /etc/systemd/system.conf | grep StartLimit #DefaultStartLimitIntervalSec=10s #DefaultStartLimitBurst=5
Но это поведение можно изменить. Понятно, что его можно изменить в указанном конфигурационном файле /etc/systemd/system.conf, но особого смысла делать этого для всех служб нет — если служба не запускается, то почти наверняка требуется вмешательство системного администратора для исправления причин проблемы.
Но для некоторых служб или некоторых ситуаций это может быть полезным. Далее показан пример, как настроить бесконечный перезапуск службы с именем honeycreeper.
Создайте drop-in каталог конфигурации и установите в нём следующие параметры для перезапуска службы (в данном примере honeycreeper). Мы устанавливаем время перезапуска на каждые десять секунд в случае сбоя — время не должно быть слишком маленьким, иначе это приведёт к бесконечным частым попыткам перезапуска с соответствующей нагрузкой на центральный процессор.
sudo mkdir -p /etc/systemd/system/honeycreeper.service.d cat <<EOF | sudo tee /etc/systemd/system/honeycreeper.service.d/restart.conf [Unit] StartLimitIntervalSec=0 [Service] Restart=always RestartSec=10 EOF sudo systemctl daemon-reload
В случае вылета, служба будет перезапускаться бесконечно.
Посмотрим статус настроенной службы:
sudo systemctl status honeycreeper
В выводимой информации видно, что применяется конфигурационный файл Drop-In (restart.conf), служба не помечена как failed, последний раз она перезапускалась 6 секунд назад.
● honeycreeper.service - honeycreeper Loaded: loaded (/etc/systemd/system/honeycreeper.service; enabled; vendor preset: enabled) Drop-In: /etc/systemd/system/honeycreeper.service.d └─restart.conf Active: activating (auto-restart) (Result: exit-code) since Sun 2020-08-23 19:19:37 CEST; 6s ago Docs: man:honeycreeper(1) file:/usr/share/doc/honeycreeper/configuration.txt.gz Process: 614105 ExecStartPre=/usr/sbin/honeycreeper -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=1/FAILURE)
Попробуем посмотреть службы со статусом failed:
sudo systemctl --failed
Таких служб нет:
UNIT LOAD ACTIVE SUB DESCRIPTION 0 loaded units listed. Tags
Служба не будет помечена как сбойная, потому что она использует функцию постоянного автоматического перезапуска.
Связанные статьи:
- Как определить, какие службы нужно перезапустить (100%)
- Нужно ли перезапускать службы при обновлении пакетов (100%)
- Ошибка «Failed to talk to init daemon.» (РЕШЕНО) (73.8%)
- В чём разница между «systemctl reboot» и «reboot», а также «systemctl poweroff» и «poweroff» (73.8%)
- Как определить расположение и имя конфигурационного файла MySQL (MariaDB). Как узнать название групп для конфигурационных файлов MySQL и MariaDB (69.2%)
- Решение проблемы: не найдена определённая версия библиотеки (RANDOM - 50%)