web-dev-qa-db-fra.com

SystemD ne redémarre pas monit après avoir tué

J'ai activé SystemD de charger monit au démarrage

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

Mais quand je tue monit, ça ne recommence pas:

 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 montre que Monit est actif mais il est sorti

Sudo systemctl status monit.service
[.____] ● Monit.service - LSB: Démon de surveillance des services et de ressources [.____] Chargé: chargé (/etc/init.d/monit; généré; Vendeur prédéfinie: activé) 
 Drop : /etc/systemd/system/monit.service.d
 └─Override.conf [.____] actif: actif (excepté) depuis le mer mer 2017-09-06 18:19:17 UTC; Il y a 29 ans 
 Documents: Man: SystemD-Sysv-Generator (8) 
 Processus: 6830 EXECSTOP =/etc/init.d/Monit Stop (Code = Exited, Status = 0/Succès) 
 Processus: 6835 Execstart =/etc/init.d/Monit Démarrer (Code = Exited, Status = 0/Succès) [ [.____] 
 SEP 06 18:19:17 Localhost SystemD [1]: Stopped LSB: Démon de surveillance des services et de ressources. [.____ Démarrage de LSB: Démon de surveillance des services et de ressources ... 
 06 18:19:17 Localhost Monit [6835]: * Jeu de démarrage Monit Monit 
 Sep 06 18:19:17 Localhost Monit [6835 ]: ... terminé. 
 Sep 06 18:19:17 Localhost SystemD [1]: Monit.Service: PID Fichier /Run/monit.pid Non lisible (encore?) Après le départ: Aucun fichier ou Annuaire 
 Sep 06 18:19:17 Localhost SystemD [1]: Début LSB: Démon de surveillance des services et des ressources. [.____]

Pourriez-vous m'aider à configurer SystemD afin qu'il redémarre monit après avoir été tué?

J'utilise Ubuntu 17.04

1
Hirurg103

Je crois que l'ajout de l'option Restart à votre fichier de service systemd garantirait qu'il est de commencer lorsqu'il n'est pas arrêté par le systemctl stop commande:

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

Info:

Non: La valeur par défaut, le service ne sera pas redémarré

On-réussite: ne sera redémarré que lorsque le processus de service sort proprement

On-défaillance: sera redémarré lorsque le processus se ferme avec un code de sortie non nul

On-Abort: ne sera redémarré que si le processus de service est sorti en raison d'un signal non capitalisé non spécifié comme état de sortie propre

On-WatchDog: ne sera redémarré que si le délai de surveillance du service expire

Toujours: sera redémarré, que ce soit à la fois proprement ou non, s'est terminé anormalement par un signal, ou frappe un délai d'attente

Redémarrage = Configure si le service doit être redémarré lorsque le processus de service se déroule, est tué ou un délai d'attente est atteint. Le processus de service peut être le processus de service principal, mais peut également être l'un des processus spécifiés avec EXECTARTPRE =, EXECTARTPOST =, EXECTOP =, EXECSTOPPOST = ou EXECRRELOAD =. Lorsque la mort du processus est le résultat de l'opération SystemD (E.G. STOCK STOP ou REDOMT), le service ne sera pas redémarré. Les délais d'attente incluent la date limite de WatchDog "Keep-Alive Ping" et un service de départ, recharger et arrêter les délais d'utilisation.

Prend l'un de NO, SUCCÈS SUCCÈS, ÉCHEC, ON-ANDNORMAL, SUR LE WATCHDOG, ON-ABORT, OU TOUJOUR. Si défini sur Non (par défaut), le service ne sera pas redémarré. Si défini sur le succès de la réussite, il sera redémarré uniquement lorsque le processus de service sort proprement. Dans ce contexte, une sortie propre signifie un code de sortie de 0, ou l'un des signaux SIGTUP, SIGINT, SIGTERM, SIGPIPE, ainsi que des statuts de sortie et des signaux spécifiés dans SILITSExITStatus =. Si défini sur la défaillance, le service sera redémarré lorsque le processus se déroule avec un code de sortie non nul, est terminé par un signal (y compris sur le point de vidage de noyau, mais à l'exclusion des quatre signaux susmentionnés), lorsqu'une opération (telle que le service Recharger) Times Out, et lorsque le délai d'attente de surveillance configuré est déclenché. Si défini sur On-anormal, le service sera redémarré lorsque le processus est terminé par un signal (y compris sur le point de vidage de noyau, à l'exclusion des quatre signaux susmentionnés), lors de la sortie de fonctionnement ou lorsque le délai d'attente de surveillance est déclenché. Si défini sur On-Abort, le service sera redémarré uniquement si le processus de service est sorti en raison d'un signal non capitalisé non spécifié en tant que statut de sortie propre. Si défini sur WatchDog, le service sera redémarré uniquement si le délai d'attente de surveillance pour le service expire. Si vous êtes prêt à toujours, le service sera redémarré, que cela soit procuré ou non, s'est terminé de manière proprement ou non, par un signal ou frappe un délai d'attente.

enter image description here

source d'image

La source:

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

2
George Udosen

RemainAfterExit Option de configuration est l'astuce

Après des heures d'expérimentation avec la configuration SystemD, j'ai découvert la solution qui fonctionne:

Sudo systemctl edit monit

Ensuite, remplissez la configuration suivante:

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

Et recharger le démon:

Sudo systemctl daemon-reload
Sudo systemctl restart monit

Maintenant SystemD redémarre mon service Monit quand je le tue:

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
1
Hirurg103