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...loadavg=$( 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.awk
.awk
can do floating points,bash
or[
cannot.uptime
, not need to run one iteration oftop
for that.