Je voudrais savoir s'il existe un moyen Systemd
de redémarrer A.service
( After
) lors du B.service
démarrage ou du rechargement (reload config uniquement), si possible sans modification B.service
qui est installée et mise à niveau par le système.
A.service
devrait démarrer même s'il B.service
n'est pas installé, désactivé ou arrêté.
A.service
:
[Unit]
After = B.service network-online.target
Wants = B.service
[Service]
Type=oneshot
ExecStart = /script.sh start
ExecStop = /script.sh stop
RemainAfterExit=yes
[Install]
WantedBy = network-online.target
B.service
:
[Unit]
After=syslog.target network.target
[Service]
Type=forking
ExecStart=/cmd start
ExecStop=/cmd stop
ExecReload=/cmd reload
PIDFile=/var/run/cmd.pid
[Install]
WantedBy=multi-user.target
Overriding vendor settings
mais cela semble encore plus facile et prometteur, seule excpetion est que je ne veuxA
pas m'arrêter siB
arrêter, justeA.restart
siB.start
, de toute façon je ferai bientôt un test et voir s'il y a un moyen de le gérer, alors vous le fera savoirPartOf
etRestart=always
ensemble?Restart=
documentation, je ne sais pas quel est le comportement avec lesoneshot
services, mais peu importe:When the death of the process is a result of systemd operation (e.g. service stop or restart), the service will not be restarted
si je comprends bien, arrêter manuellement B arrêterait APartOf
n'est pas une solution à la question, profitez-en quand même.PartOf
avecRestart=always
? Avez-vous essayé cela?J'ai eu aucun contrôle sur
stop
avecPartOf=
, etA
il ne faut pas arrêter avecB
, donc je me suis retrouvé à l' aide de modifier les réglages des fournisseurs , semble fonctionner./etc/systemd/system/B.service.d/override.conf
/cmd
l'implémentation est asynchrone et accède à une ressource à laquelle il/script.sh
faut aussi accéder, je n'ai rien trouvé de mieux (pour l'instant) pour dormir quelques secondes.J'ai essayé d'utiliser
systemctl [--no-block] try-restart
avant d'utiliser/script.sh
directement mais n'a pas fonctionné.la source
man systemd.unit
(ou recherchez-le en ligne s'il n'est pas installé) et recherchez le chapitre "Remplacement des paramètres du fournisseur".Pour le moment, systemd ne couvre pas ce senario. Vous ne pouvez pas atteindre cette fonctionnalité uniquement à l'aide des fichiers de service. Une possibilité consiste à détourner systemctl via un script shell du même nom et à vérifier si B.service est sur le point d'être redémarré / rechargé, effectuez également l'action appropriée avec A.service et, si nécessaire, mettez à jour le rc.local pour obtenir également l'état approprié au démarrage. J'ai ce problème avec docker.service et networking.service, mais je les redémarre toujours ensemble:
De toute évidence, cela ne serait pas efficace si systemd lui-même manipulait B.service en interne (par exemple via d'autres fichiers de service.).
la source