私はcronで1分ごとに実行されるPythonプログラムを実行しています。時にはCPUが大量に消費されますが、その場合は次のクローンジョブが実行されないようにする必要があります。頑張ってる
if (( `~/cpu_usage.txt` < 60 )); then `cd /path/to/program && python myfile.py 100`; fi
myfile
print bob_here
ファイルに上記の競合を引き起こすファイルが1つあります。
bob_here: command not found
myfile.py
それ自体はうまく機能するので、問題はifステートメントにあります。スクリプトが正しく実行されるようにするにはどうすればよいですか?
注:これはあまり重要ではないかもしれませんが、cpu_usage.txt
現在のCPU使用率を印刷する単純なbashプログラムです。
echo $[100-$(vmstat 1 2|tail -1|awk '{print $15}')]
答え1
チェックマークを外してPythonインタプリタへのフルパスを提供します。
if (( `~/cpu_usage.txt` < 60 )); then python /path/to/program/myfile.py 100; fi
ティックは設計どおりにキーワードの後にコマンドを実行するため、ティックは必要ありませんthen
。ティックはサブシェルを起動し、結果/出力をコマンドとして使用しますif-then
。これは望むものではありません。
> if true; then echo OK; fi
> OK
> if true; then `echo OK`; fi
> OK: command not found
編集:私の経験によると、crontabで使用するには、すべてのコマンドをシェルスクリプトに入れてcrontabから呼び出すことをお勧めします。
答え2
たぶん、次のように分解することができます。
if (( $(vmstat 1 2|awk 'END{print 100-$15}') < 60 )); then
cd /path/to/my/program && ./python myfile.py 100
fi