終了するまで数分ごとにコマンドを実行したいと思います。
数回検索した後、前半(コマンドを定期的に無期限に実行)する方法はいくつか見つかりましたが、この機能をオフにするにはどうすればよいですか。
編集
「閉じる」とは、おそらく「別のシェルコマンドを使用して閉じる」という意味です。
編集
私が実際にやろうとしていることを明確にするために、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
答え2
watch
「ループ」を使用してプログラムを繰り返し実行し、結果を確認したり、while
ループを試したりできます。プロセスのPIDを取得し、echo $!
それを使用してkill
PIDを終了します。たとえば、
while :; do ./test.py; done & echo $! > /tmp/testpy.pid
次の場合は、killを使用してプログラムを終了します。
kill -9 `cat /tmp/testpy.pid`
答え3
cron ジョブを作成して定期的にコマンドを実行できます。たとえば、毎時間ジョブを実行するには、次のcronジョブを作成します。
0 * * * * /path/to/your/command >/dev/null 2>&1
ジョブタイプの実行を停止して終了するにはps aufx|grep yourcommand|grep -v
pidです。
答え4
+を押すCTRLか、cSIGTERM信号を使用または送信できます。kill
killall