I have written a script to determine the Load average on the server as follows:
#!/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
When the script is executed, it displays following error:
./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
top -b n1 | awk -F, '/load/ {print $4}'
is a lot cleaner... – jasonwryan Jun 20 '14 at 9:41loadavg=$( cut -d' ' -f1 </proc/loadavg )
- and no, still not an integer expression. It's a fixpoint. If you want to use-le
and friends, considercut -d' ' -f1 </proc/loadavg | cut -d. -f1
, i.e. just drop everything after the integer part. – Felix Frank Jun 20 '14 at 9:59awk
.awk
can do floating points,bash
or[
cannot. – Stéphane Chazelas Jun 20 '14 at 10:24uptime
, not need to run one iteration oftop
for that. – Stéphane Chazelas Jun 20 '14 at 10:25