Ne postez pas normalement ici mais je déchire mes cheveux sur celui-ci. J'ai un Python script qui fourchette lors de son lancement et qu'il est responsable de la création d'un groupe d'autres processus. Ce script utilisé pour être lancé au démarrage via Sysvinit, mais je suis récemment mis à niveau vers Debian Jessie afin l'ont adapté à lancer via SystemD.
Malheureusement, je rencontre une question que je ne peux pas travailler. Lorsque vous lancez le script directement dans un shell utilisateur, il lance correctement les processus enfants et lorsque le script sort, les processus d'enfants sont orphelins et continuent à courir.
Lors du lancement via SystemD, si le processus parent sort, les enfants toutes sortaient également (Eh bien, l'écran qu'ils se lancent dans la mort et apparaissent comme morts ???)
Idéalement, j'ai besoin de pouvoir redémarrer le script parent sans tuer tous les processus de l'enfant, y a-t-il quelque chose qui me manque?
Merci!
[Unit]
Description=Server commander
After=network.target
[Service]
User=serveruser
Type=forking
PIDFile=/var/Server/Server.pid
ExecStart=/var/Server/Server.py
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
Edit: il est probablement pertinent pour moi de souligner que le Python Script est essentiellement un "contrôleur" pour ses processus enfants. Il démarre et arrête les serveurs dans les écrans GNU comme demandé à partir d'un serveur central. Il est normalement toujours en cours d'exécution, il ne reproche pas de services et de sortie. Il y a cependant des cas où j'aimerais pouvoir recharger le script sans tuer des processus d'enfants, même si cela signifie que les processus sont orphelins à partir de PID 1. En fait, Cela ne comporterait même pas si le Python script a démarré des processus en tant que processus parent, si cela est encore possible.
Une meilleure explication de la façon dont cela fonctionne:
Lors du lancement sans SystemD, Server.py peut être redémarré et que les écrans GNU, il est lancé ne sont pas affectés. Lors du lancement avec SystemD, lorsque Server.py s'arrête, au lieu de ces processus d'écran étant orphelinés à PID 1, ils sont tués.
J'ai réussi à résoudre ce problème simplement en définissant Killmode à traiter au lieu de contrôler le groupe (par défaut). Merci a tous
Vous pouvez simplement dormir le parent et attendre que SystemD le tue au moment de l'arrêt.