J'écris mon premier fichier systemd
.
Pour Type
, il y a quelques choix: forking
, simple
, etc. J'ai lu la documentation Redhat sur ce sujet (tableau 9.9), mais je le suis toujours. Je ne sais pas quand je devrais utiliser quelle option.
Des lignes directrices?
Lorsque vous démarrez le service manuellement à partir de la ligne de commande (sans utiliser la commande Nohup
prefix ou le suffixe &
pour l'exécuter en arrière-plan), que se passe-t-il?
a) Si le service démarre et continue de fonctionner et que l'invite ne s'affiche pas tant que vous n'avez pas appuyé sur Control-C ou arrêté le service d'une autre manière: alors Type = simple
est le bon choix.
b) Si l’invite revient mais que le service continue à s’exécuter en arrière-plan (c’est-à-dire que le service se démonçoit tout seul), alors Type = forking
est le bon choix.
c) Si le service fait son travail et retourne à l’invite sans rien exécuter (c’est-à-dire qu’il ajuste simplement certains paramètres du noyau, envoie une commande à quelque chose d’autre ou fait quelque chose de similaire), alors Type = oneshot
est probablement le bon choix. Dans ce cas, ExecStart
du service pourrait être la commande pour "définir" quelque chose, et ExecStop
serait la commande correspondante pour "le désactiver". Ce type bénéficie généralement de RemainAfterExit=true
; ainsi, systemd gardera trace de "l'état" de ce service selon que l'élément a été "récemment" défini ou non.
Les autres valeurs Type
sont des cas spéciaux. Par exemple, si le service utilise une connexion D-Bus, alors Type = dbus
pourrait être le meilleur choix. systemd
en est conscient, puis systemd suivra ce service (et tout ce qui en dépend) par la présence de ce service sur le D-Bus.