次のようにサーバーの負荷平均を決定するスクリプトを作成しました。
#!/bin/bash
loadavg=`top -b -n1 | grep -i load | awk -F, '{print$4}'| awk -F: '{print $2}'`
if [ "${loadavg}" -le 1 ]
then
echo "OK - Load Average = ${loadavg} | Load_Average=${loadavg}"
exit 0;
elif [ "${loadavg}" -gt 1 ] && [ "${loadavg}" -le 2 ]
then
echo "WARNING - Load Average = ${loadavg} | Load_Average=${loadavg}"
exit 1;
elif [ "${loadavg}" -gt 2 ]
then
echo "CRITICAL - Load Average = ${loadavg} | Load_Average=${loadavg}"
exit 2;
else
echo "UNKNOWN - Load Average = NaN | Load_Average=NaN"
fi
スクリプトを実行すると、次のエラーが表示されます。
./loadavg.sh
./loadavg.sh: line 5: [: 0.06: integer expression expected
./loadavg.sh: line 9: [: 0.06: integer expression expected
./loadavg.sh: line 13: [: 0.06: integer expression expected
UNKNOWN - Load Average = NaN | Load_Average=NaN
ベストアンサー1
bash
ksh93
zsh
(または1とは逆)浮動小数点演算を実行できません。awk
しかし、そうです。ですべての操作を実行できますawk
。
top
また、ロードを受け取るためにを使用して1秒待つ必要はありません。ペイロードを得るための正式な方法はuptime
。
uptime | awk '{load=+$(NF-2)}
load > 2 {print "CRITICAL: " load; exit 2}
load > 1 {print "WARNING: " load; exit 1}
{print "OK: " load; exit 0}
END {if (!NR) {print "UNKNOWN"; exit 3}'
exit
1ただし、整数以外の値を比較するには、代替構文をzsh
使用する必要があります。(( loadavg > 2 ))
[ "$loadavg" -gt 2 ]