終了するまで数分ごとにコマンドを実行したいと思います。
数回検索した後、前半(コマンドを定期的に無期限に実行)する方法はいくつか見つかりましたが、この機能をオフにするにはどうすればよいですか。
編集
「閉じる」とは、おそらく「別のシェルコマンドを使用して閉じる」という意味です。
編集
私が実際にやろうとしていることを明確にするために、P
Pythonプログラムを実際に停止するように指示するまで、Pythonプログラムを定期的に実行したいと思います。停止コマンドの実行時に実行
中の場合に備えて、P
まず現在の実行を完了してから再実行しないようにします。
ベストアンサー1
Pythonスクリプトを変更するか、シェルスクリプトラッパーを作成する2つのオプションがあります。
Pythonスクリプトを修正します。
やりたいことを繰り返す必要があります。
INT
信号(Ctrl- から送信C)とTERM
信号(通常から送信)をキャプチャするには、信号ハンドラを取り付けますkill
。シグナルをキャプチャした後、Pythonスクリプトに再度繰り返さないようにする変数を設定します。私はこれを行う方法を教えてくれるほど、Pythonに慣れていません。
代替ソリューション:上記と同じことを行いますが、Pythonスクリプトの外側にあるシェルスクリプトラッパー:
#!/bin/sh
loop_again=1
trap 'loop_again=0;wait' INT TERM
while (( loop_again )); do
echo "Kill me with 'kill -9 $$'"
./python_script &
echo "Kill the Python script with 'kill $!'"
wait
done
このラッパースクリプトはPythonスクリプトをバックグラウンドで起動し、完了するのを待ちます。その後、無期限に再起動します。また、各反復でこれを終了する方法とPythonスクリプトを教えてくれます。
スクリプトkill
(シンプルな使用kill
、いいえ kill -9
)またはCtrl-をC押すとloop_again
、変数が0に設定され(現在の反復が終了するとループが終了します)、終了する前に現在実行中のバックグラウンドプロセスが完了するのを待ちます。
キルラッパースクリプト(シグナルハンドラが無視または捕捉できない信号を送信するのとkill -9
同じ)を使用すると、そのスクリプトは終了し、Pythonスクリプトはそれ自体が完了するまでバックグラウンドで実行されます。kill -s KILL
KILL