98 lines
2.7 KiB
Bash
Executable File
98 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# SCRIPT: uptime_loadmon.bash
|
|
# AUTHOR: Randy Michael
|
|
# DATE: 12/16/2007
|
|
# REV: 1.0.P
|
|
# PLATFORM: AIX, HP-UX, Linux, OpenBSD, and Solaris
|
|
#
|
|
# PURPOSE: This shell script uses the "uptime" command to
|
|
# extract the most current load average data, which
|
|
# in this case is the average number of jobs in the
|
|
# run queue.
|
|
#
|
|
# set -x # Uncomment to debug this shell script
|
|
# set -n # Uncomment to check script syntax without any execution
|
|
#
|
|
###################################################
|
|
############# DEFINE VARIABLES HERE ###############
|
|
###################################################
|
|
|
|
MAXLOAD=2.00
|
|
|
|
# Extract the interger and decimal parts of $MAXLOAD
|
|
MAXLOAD_INT=$(echo $MAXLOAD | awk -F '.' '{print $1}')
|
|
MAXLOAD_DEC=$(echo $MAXLOAD | awk -F '.' '{print $2}')
|
|
|
|
# Check the UNIX flavor for the correct uptime values
|
|
# AIX specifies load as the last 5, 10, and 15 minutes.
|
|
# The other UNIX flavors specifies the load in the last
|
|
# 1, 5, and 15 minutes.
|
|
|
|
case $(uname) in
|
|
AIX) L1=5
|
|
L2=10
|
|
L3=15
|
|
;;
|
|
*)
|
|
L1=1
|
|
L2=5
|
|
L3=15
|
|
;;
|
|
esac
|
|
|
|
|
|
###################################################
|
|
# DEFINE FUNCTIONS HERE
|
|
###################################################
|
|
|
|
function get_max
|
|
{
|
|
# This function return the number of auguments
|
|
# presented to the function
|
|
#
|
|
(($# == 0)) && return -1
|
|
echo $#
|
|
}
|
|
|
|
###################################################
|
|
# BEGINNING OF MAIN
|
|
###################################################
|
|
|
|
echo -e "\nGathering System Load Average using the \"uptime\" command\n"
|
|
|
|
# This next command statement extracts the latest
|
|
# load statistics no matter what the UNIX flavor is.
|
|
|
|
NUM_ARGS=$(get_max $(uptime)) # Get the total number of fields in uptime output
|
|
|
|
((NUM_ARGS == -1)) && echo "ERROR: get_max Function Error...EXITING..."\
|
|
&& exit 2
|
|
|
|
|
|
# Extract the data for the last 5, 10, and 15 minutes
|
|
|
|
ARGM2=$(((NUM_ARGS - 2))) # Subtract 2 from the total
|
|
ARGM1=$(((NUM_ARGS - 1))) # Subtract 1 from the total
|
|
ARGM=$NUM_ARGS # Last value in string
|
|
|
|
uptime | sed s/,//g | awk '{print $'$ARGM2', $'$ARGM1', $'$ARGM'}' \
|
|
| while read LAST5 LAST10 LAST15
|
|
do
|
|
echo $LAST5 | awk -F '.' '{print $1, $2}' \
|
|
| while read INT DEC
|
|
do
|
|
if (( INT > MAXLOAD_INT ))
|
|
then
|
|
echo -e "\nWARNING: System load has \
|
|
reached ${LAST5}\n"
|
|
fi
|
|
|
|
echo "System load average for the last $L1 minutes is $LAST5"
|
|
echo "System load average for the last $L2 minutes is $LAST10"
|
|
echo "System load average for the last $L3 minutes is $LAST15"
|
|
echo -e "\nThe load threshold is set to ${MAXLOAD}\n"
|
|
done
|
|
done
|
|
|