Systemdとプロセスの生成
通常はここに投稿しないでくださいが、私はこの髪の毛を切り取っています。起動時に分岐し、他のプロセスの束を開始するPythonスクリプトがあります。このスクリプトは、起動時にsysvinitを介して起動されていましたが、最近Debian Jessieにアップグレードしたため、systemdを介して起動するように適合させました。 残念ながら、解決できない問題に直面しています。ユーザーシェルでスクリプトを直接起動すると、その子プロセスが正しく起動され、スクリプトが終了すると、子プロセスは孤立して実行を継続します。 systemdを介して起動した場合、親プロセスが終了すると、子もすべて終了します(まあ、画面はダイで起動し、死んでいるように見えますか?) 理想的には、すべての子プロセスを強制終了せずに親スクリプトを再起動できる必要がありますが、何か足りないものはありますか? ありがとう! [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 編集:Pythonスクリプトは、本質的にその子プロセスの「コントローラー」であると指摘することはおそらく関連があります。中央サーバーからの要求に応じて、GNU画面でサーバーを起動および停止します。通常は常に実行されており、サービスを生成して終了しません。ただし、プロセスがpid 1に孤立していることを意味する場合でも、子プロセスを強制終了せずにスクリプトをリロードできるようにしたい場合があります。実際、Pythonスクリプトが可能であれば、親プロセス。 仕組みのより良い説明: Systemdは/Server.pyを生成します Server.pyはSystemdのpidファイルを分岐して書き込みます Server.pyは、その指示に基づいてgnu画面にサーバープロセスを生成します Server.pyは、サーバーから要求された再起動を実行するために実行を続けます Systemdを使用せずに起動すると、Server.pyを再起動でき、起動するgnu画面は影響を受けません。Systemdで起動すると、Server.pyがシャットダウンすると、それらのスクリーンプロセスがpid 1に孤立する代わりに、それらは強制終了されます。