Systemd не перезапускает monit после того, как уничтожат

Я позволил systemd загрузить monit при запуске

sudo systemctl enable monit
sudo systemctl restart monit
ps aux | grep monit
root      6843  0.0  0.2 112492  2948 ?        Sl   18:19   0:00 /usr/bin/monit -c /etc/monit/monitrc
lookpla+  6857  0.0  0.0  14212  1008 pts/0    S+   18:21   0:00 grep --color=auto monit

Но когда я уничтожаю monit, он не запускается снова:

 sudo kill 6843
 ps aux | grep monit
 lookpla+  6862  0.0  0.1  14212  1028 pts/0    S+   18:23   0:00 grep --color=auto monit

Systemctl показывает, что monit активен, но выходится

sudo systemctl status monit.service
● monit.service - LSB: service and resource monitoring daemon
   Loaded: loaded (/etc/init.d/monit; generated; vendor preset: enabled)
  Drop-In: /etc/systemd/system/monit.service.d
           └─override.conf
   Active: active (exited) since Wed 2017-09-06 18:19:17 UTC; 4min 29s ago
     Docs: man:systemd-sysv-generator(8)
  Process: 6830 ExecStop=/etc/init.d/monit stop (code=exited, status=0/SUCCESS)
  Process: 6835 ExecStart=/etc/init.d/monit start (code=exited, status=0/SUCCESS)
 Main PID: 6843 (code=exited, status=0/SUCCESS)

Sep 06 18:19:17 localhost systemd[1]: Stopped LSB: service and resource monitoring daemon.
Sep 06 18:19:17 localhost systemd[1]: Starting LSB: service and resource monitoring daemon...
Sep 06 18:19:17 localhost monit[6835]:  * Starting daemon monitor monit
Sep 06 18:19:17 localhost monit[6835]:    ...done.
Sep 06 18:19:17 localhost systemd[1]: monit.service: PID file /run/monit.pid not readable (yet?) after start: No such file or directory
Sep 06 18:19:17 localhost systemd[1]: Started LSB: service and resource monitoring daemon.

Вы могли помочь мне настроить systemd, таким образом, он перезапустит monit после того, как он был уничтожен?

Я использую человечность 17.04

0
задан 6 September 2017 в 12:03

2 ответа

Я верю добавлению Restart опция к Вашему systemd сервисный файл гарантировал бы, что это добирается, запускаются, когда в них не заходят systemctl stop команда:

Restart=[no | on-success | on-failure | on-abnormal | on-watchdog | on-abort | always ]

Информация:

нет: значение по умолчанию, сервис не будет перезапущен

на успехе: будет перезапущен только, когда сервисный процесс выйдет чисто

на отказе: будет перезапущен, когда процесс выйдет с ненулевым кодом выхода

на аварийном прекращении работы: будет перезапущен, только если сервисный процесс выходит из-за непойманного сигнала, не указанного как чистый статус выхода

на сторожевом таймере: будет перезапущен, только если сторожевой тайм-аут для сервиса истекает

всегда: будет перезапущен независимо от того, вышло ли это чисто или нет, было завершено неправильно сигналом или поражало тайм-аут

Перезапуск = Настраивает, должен ли сервис быть перезапущен, когда сервисный процесс выходы, будет уничтожен, или тайм-аут достигнут. Сервисный процесс может быть основным сервисным процессом, но это может также быть один из процессов, указанных с ExecStartPre =, ExecStartPost =, ExecStop =, ExecStopPost =, или ExecReload =. Когда смерть процесса будет результатом systemd операции (например, сервисная остановка или перезапуск), сервис не будет перезапущен. Тайм-ауты включают пропавших без вести сторожевого таймера "активный ping" крайний срок, и сервис запускают, перезагружают, и операционные тайм-ауты остановки.

Берет один из не, на успехе, на отказе, на-аварийном, на сторожевом таймере, на аварийном прекращении работы, или всегда. Если установлено на не (значение по умолчанию), сервис не будет перезапущен. Если установлено на на успехе, это будет перезапущено только, когда сервисный процесс выйдет чисто. В этом контексте чистый выход означает код выхода 0 или один из сигналов SIGHUP, SIGINT, SIGTERM или SIGPIPE, и дополнительно, статусы выхода и сигналы, указанные в SuccessExitStatus =. Если установлено на на отказе, сервис будет перезапущен, когда выходы процесса с ненулевым кодом выхода, будет завершен сигналом (включая на дампе ядра, но, исключая вышеупомянутые четыре сигнала), когда операция (такая как сервисная перезагрузка) испытывает таймаут, и когда настроенный сторожевой тайм-аут инициирован. Если установлено на на-аварийном, сервис будет перезапущен, когда процесс будет завершен сигналом (включая на дампе ядра, исключая вышеупомянутые четыре сигнала), когда операция испытывает таймаут, или когда сторожевой тайм-аут инициирован. Если установлено на на аварийном прекращении работы, сервис будет перезапущен, только если сервисный процесс выходит из-за непойманного сигнала, не указанного как чистый статус выхода. Если установлено на на сторожевом таймере, сервис будет перезапущен, только если сторожевой тайм-аут для сервиса истекает. Если установлено на всегда, сервис будет перезапущен независимо от того, вышел ли он чисто или нет, был завершен неправильно сигналом или поражал тайм-аут.

enter image description here

Источник изображения

Источник:

https://www.freedesktop.org/software/systemd/man/systemd.service.html

1
ответ дан 2 November 2019 в 07:38

RemainAfterExit параметр конфигурации добился цели

После часов экспериментирования с systemd конфигурацией я узнал решение, которое работает:

sudo systemctl edit monit

Затем заполните следующую конфигурацию:

[Service]
PIDFile=/var/run/monit.pid
Restart=always
RemainAfterExit=no

И перезагрузка демон:

sudo systemctl daemon-reload
sudo systemctl restart monit

Теперь systemd перезапускает мой monit сервис, когда я уничтожаю его:

ps aux | grep monit
root      7822  0.0  0.2 112476  2872 ?        Sl   19:09   0:00 /usr/bin/monit -c /etc/monit/monitrc
lookpla+  7855  0.0  0.0  14212  1008 pts/0    S+   19:12   0:00 grep --color=auto monit

sudo kill 7822
root      7872  0.0  0.2 112476  2964 ?        Sl   19:13   0:00 /usr/bin/monit -c /etc/monit/monitrc
lookpla+  7875  0.0  0.0  14212   984 pts/0    S+   19:13   0:00 grep --color=auto monit
0
ответ дан 2 November 2019 в 07:38

Другие вопросы по тегам:

Похожие вопросы: