web-dev-qa-db-fra.com

forgeron vs simple?

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?

16
leeyuiwah

Lorsque vous démarrez le service manuellement à partir de la ligne de commande (sans utiliser la commande Nohupprefix 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.

29
telcoM