systemdを介してスクリプトを介して開始された進行中のPythonプロセスのPIDを取得します。

systemdを介してスクリプトを介して開始された進行中のPythonプロセスのPIDを取得します。

systemd起動時にシェルスクリプトを実行し、start.sh最終的にmain.pyプログラムを起動するために使用するデフォルトのPythonスクリプトです。

main.py後でプログラムでPIDを終了できるように、PIDを記録したいと思います。

まず、次のことを試みましたが、PIDが記録されたにもかかわらず、Pythonスクリプトがアクティブになっていないことがわかりました(エラー出力をログファイルにリダイレクトしました)。

sudo python main.py 2> >(sudo tee /var/log/app.log) &
echo $1 > /tmp/app.pid

ただし、削除すると&スクリプトはアクティブのままになりますが、PIDスクリプトはPIDが書き込まれる行には達しません。

sudo python main.py 2> >(sudo tee /var/log/app.log)
echo $1 > /tmp/app.pid

main.pyアクティブなままでもPIDを提供する方法で実行するにはどうすればよいですか?

ベストアンサー1

簡単な例として、exec

exec現在のプロセスの実行可能ファイルを別の実行可能ファイルに置き換えます。

sudo bash -c ' echo $$ > /var/run/app.pid ; exec python3 -u /tmp/main.py  > /var/log/app.log 2>&1 '

その後、次のように確認できます。

cat /var/run/app.pid ; ps -ax -o pid,uname,args | grep "^ *$(cat /var/run/app.pid)"

おすすめ記事