La raison pour laquelle il ne termine pas la séquence de démarrage est que, pour le type forking
votre processus de démarrage est censé s'emboîter et se terminer (voir $ man systemd.service - search forking).
Il suffit d'utiliser le processus principal, sans le démoniser.
Une option consiste à en faire moins. Avec systemd, il n'est souvent pas nécessaire de créer des démons et vous pouvez exécuter directement le code sans démonisation.
#!/usr/bin/python -u
from somewhere import Node
check = Node()
check.run()
Cela permet d'utiliser un type de service plus simple appelé simple
Ainsi, votre fichier d'unité ressemblerait à ce qui suit
[Unit]
Description=Simplified simple zebra service
After=syslog.target
[Service]
Type=simple
User=node
Group=node
WorkingDirectory=/home/node/Node/
ExecStart=/home/node/Node/node.py
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
Il est à noter que le -u
dans le shebang python n'est pas nécessaire, mais dans le cas où vous imprimez quelque chose sur stdout ou stderr, l'option -u
s'assure qu'il n'y a pas de tampon de sortie en place et que les lignes imprimées seront immédiatement capturées par systemd et enregistrées dans le journal. Sans cela, elles apparaîtraient avec un certain retard.
À cette fin, j'ai ajouté les lignes suivantes dans le fichier de l'unité StandardOutput=syslog
y StandardError=syslog
. Si vous ne vous souciez pas de l'impression de votre journal, ne vous souciez pas de ces lignes (il n'est pas nécessaire qu'elles soient présentes).
systemd
rend la démonisation obsolète
Bien que le titre de votre question porte explicitement sur la démonisation, je suppose que le cœur de la question est "comment faire fonctionner mon service" et bien que l'utilisation du processus principal semble beaucoup plus simple (vous n'avez pas besoin de vous préoccuper des démons), cela pourrait être considéré comme une réponse à votre question.
Je pense que beaucoup de gens utilisent la démonisation simplement parce que "tout le monde le fait". Avec systemd, les raisons de la démonisation sont souvent obsolètes. Il peut y avoir des raisons d'utiliser la démonisation, mais c'est un cas rare maintenant.
EDIT : corrigé python -p
à la bonne python -u
. merci kmftzg