web-dev-qa-db-fra.com

Système et frai de processus

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:

  • Systemd spawns /server.py
  • Serveur.py fourchettes et écrit le fichier PID pour SystemD
  • Server.py Spwns Server traite dans l'écran GNU en fonction de ses instructions
  • Server.py continue de fonctionner pour effectuer des redémarrages demandés à partir du serveur

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.

14
Bottswana

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

10
Bottswana

Vous pouvez simplement dormir le parent et attendre que SystemD le tue au moment de l'arrêt.

0
Craig Hicks