
私の負荷平均が10を超える場合は警告を送信する必要があります。
awkコマンドが整数を返す場合は、次のことができます。
declare -i MAX_LOAD=10
declare -i L1=`cat /proc/loadavg | awk {'print $1'}`
if [ $L1 -gt $MAX_LOAD ]
then
echo "Alert"
fi
ただし、L1は浮動小数点値(例:2.35)を返します。
この場合、値をどのように比較できますか?
答え1
すでにawkを使用しているので、おそらく最も簡単な方法は、その言語でも浮動小数点比較を実行することです。
MAX_LOAD=10.0
if ! </proc/loadavg awk -vmax_load=$MAX_LOAD '{ exit $1 > max_load }'
then
echo Alert
fi
!
演算子反転テストなど、いくつかのトリックが関連しています。これは、awkのブール式と値を受け取るステータスコード設定がif
逆の意味を持つために必要です。ファイルをawkの標準入力に<
送信するために使用されます。/proc/loadavg
awkを呼び出すと、-vmax_load=$MAX_LOAD
awk変数がmax_load
シェル変数の値に設定されますMAX_LOAD
。
場合によっては、MAX_LOADが整数であり、ファイルから最初の浮動小数点を読み取るため、一時的な解決策は次のとおりです。
if [ $(</proc/loadavg cut -f1 -d.) -gt $MAX_LOAD ] ...
呼び出しはcut
の最初の数字の整数部分を抽出します/proc/loadavg
。しかし、上記の仮定のいずれかが間違っていることが判明した場合、アイデアは失敗します。