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)"