バックグラウンドで実行したいPythonスクリプトがあります。だから私はこうします:
$ nohup python script.py &
スクリプトを頻繁に変更した場合は、プロセスを終了してスクリプトを再実行する必要があります。
$ kill -9 <pid_of_bg_process>
$ nohup python script.py &
プロセスを終了せずに再ロードできますか?
答え1
短い答え - いいえ。
長い答え:実際にはPythonインタプリタを呼び出しています。インタプリタはscript.pyをロードして解析します。
スクリプトを変更すると、インタプリタはどの部分が変更されたのかわからないため、ファイルを再ロードして最初から始める必要があります。
これで、目標がPythonにスクリプトを再ロード/再起動するように指示することであれば、それをシェルスクリプトにラップできます。
#!/bin/sh
LINE="python script.py"
stop()
{
pkill -f "$LINE"
}
clean()
{
stop
exit 0
}
trap stop 1
trap clean 9 15
while true
do
$LINE &
wait
done
これでシェルスクリプトを起動できます(必要に応じてバックグラウンドでnohupを使用して)。 HUPシグナルを送信すると、Pythonプロセスが再開されます。
ラッパープロセスを終了すると、Pythonスクリプトも終了します。
私のスクリプトをテストしていませんが、アイデアは明確でなければなりません。
答え2
kill -USR1 PIDまたはpidof script.py
-9を使用してプロセスを終了でき、-15を使用して正常に終了できます。