かなり奇妙な問題が発生しています。複数のサーバーでスクリプト(Bash)を実行しているのですが、いずれかのサーバーで動作しなくなりました(他のすべてのサーバーでは完全に正常に動作します)。
スクリプトの問題部分は次のとおりです:(私は自分で書いたわけではありません。すべてのクレジットは「リッチ」に送られます)(http://www.notrainers.org/monitoring-memory-usage-on-linux-with-nagios-および-nrpe/)
if [ "$result" -lt "$warn_level" ]; then #Line 56
echo "Memory OK. $result% used."
exit 0;
elif [ "$result" -ge "$warn_level" ] && [ "$result" -le "$critical_level" ]; then #Line 59
echo "Memory WARNING. $result% used."
exit 1;
elif [ "$result" -gt "$critical_level" ]; then #Line 62
echo "Memory CRITICAL. $result% used."
exit 2;
fi
完全なエラーメッセージ:
./check_memory.sh: Line 56: [: 7.: integer expression expected
./check_memory.sh: Line 59: [: 7.: integer expression expected
./check_memory.sh: Line 62: [: 7.: integer expression expected
さらに詳しい情報が必要な場合はお知らせください。できるだけ早く提供できるよう努めます。
すべての入力に感謝します🙂
承認された回答:
あなたが提供したリンクから、私は以下の行を見る。
result=$(echo "$used / $total * 100" |bc -l|cut -c -2)
@Graemeのコメントに従って、上の行を下に変更してください。
result=$(echo "$used / $total * 100" |bc -l)
ここで、上記の行を追加した後、result
の出力を変更する必要があります 以下のように整数に変換します。
result1=${result/.*}
エラーが発生したマシンの1つでは、この出力は整数ではないと思います。結果の出力を整数に変換するだけで、このような場合に対処できます。 result
を計算した後、以下の行を追加します 。
result1=${result/.*}
そして、result
の代わりに 変数名をresult1
として変更します if
内 ループし、エラーは発生しません。
cut -c -2
だと思います これは主に、最初の2文字のみをカットしているため、エラーに起因します。結果に1文字しかない場合はどうなりますか?結果が1.23456
であると仮定します 、上記のカットは1.
result
の値として これが明らかにinteger expected
の原因です エラー。
残りのサーバーで正常に動作している理由は、result
のケースが発生していないためです。 変数は1桁です。結果が1桁の変数(上記の例で述べたようなもの)の場合、残りのサーバーでも失敗する可能性が高くなります。