/ Published in: Bash
                    
                                        
                            
                                Expand |
                                Embed | Plain Text
                            
                        
                        Copy this code and paste it in your HTML
#!/bin/sh
# Start clean!
if [ -f /tmp/emailTMP ]; then
rm -rf /tmp/emailTMP
fi
if [ -f /tmp/procTMP ]; then
rm -rf /tmp/procTMP
fi
if [ -f /tmp/sendmailTMP ]; then
rm -rf /tmp/sendmailTMP
fi
# Init variables
eMail="[email protected]"
serverLoadLog=/var/log/custom/serverLoad.log
procTMP="/tmp/procTMP"
memLimit=50
memWarning=25
memTripped=FALSE
cpuLimit=99
cpuWarning=50
cpuTripped=FALSE
emailReport() {
if [ -f /tmp/emailTMP ]; then
echo "Subject: cshaiku.com Server Load Status" > /tmp/sendmailTMP
cat /tmp/emailTMP >> /tmp/sendmailTMP
printf "\n$emailDate" >> /tmp/sendmailTMP
echo "--[`date`]--" >> $serverLoadLog
cat /tmp/sendmailTMP >> $serverLoadLog
/usr/sbin/sendmail -v "$to" < /tmp/sendmailTMP > /dev/null
fi
}
checkMemoryUsage() {
printf "\n+----------+--------------+------+======+----------------------------------+" >> $serverLoadLog
printf "\n| PID | User | CPU | MEM | Command |" >> $serverLoadLog
printf "\n+----------+--------------+------+======+----------------------------------|" >> $serverLoadLog
ps -eo pmem,pcpu,user,pid,comm | sort -rn | head -10 > $procTMP
while read pmem pcpu user pid command
do
declare -i pmemINT=`echo $pmem | awk '{printf "%.0f",$1}'`
if [ $pmemINT -gt $memLimit ]; then
set memTripped=TRUE
kill $pid
printf "\n\nKilled pid $pid\t\tuser: $user\tcpu: $pcpu\tmem: $pmem\tCommand: $command\n" >> $serverLoadLog
printf "\n\nKilled pid $pid\t\tuser: $user\tcpu: $pcpu\tmem: $pmem\tCommand: $command\n" >> /tmp/emailTMP
elif [ $pmemINT -gt $memWarning ]; then
set memTripped=TRUE
printf "\n\npid $pid\t\tuser: $user\tcpu: $pcpu\tmem: $pmem\tommand: $command\n" >> $serverLoadLog
printf "\n\npid $pid\t\tuser: $user\tcpu: $pcpu\tmem: $pmem\tommand: $command\n" >> /tmp/emailTMP
else
if [ $pid != "PID" ]; then
printf "
|%9s | %12s | %4s | %4s | %32s |" $pid $user $pcpu $pmem $command >> $serverLoadLog
fi
fi
done < $procTMP
if [ $memTripped = TRUE ]; then
printf "\nThe following commands have surpassed the Memory Usage threshold (%s)." "$memWarning%" >> /tmp/emailTMP
fi
}
checkCPUUsage() {
printf "\n+----------+--------------+======+------+----------------------------------+" >> $serverLoadLog
printf "\n| PID | User | CPU | MEM | Command |" >> $serverLoadLog
printf "\n+----------+--------------+======+------+----------------------------------|" >> $serverLoadLog
ps -eo pcpu,pmem,user,pid,comm | sort -rn | head -10 > $procTMP
while read pcpu pmem user pid command
do
declare -i pcpuINT=`echo $pcpu | awk '{printf "%.0f",$1}'`
if [ "$pcpuINT" -gt "$cpuLimit" ]; then
set cpuTripped=TRUE
kill $pid
printf "\n\nKilled pid $pid !\t\tuser: $user\tcpu: $pcpu\tmem: $pmem\tCommand: $command\n" >> $serverLoadLog
printf "\n\nKilled pid $pid !\t\tuser: $user\tcpu: $pcpu\tmem: $pmem\tCommand: $command\n" >> /tmp/emailTMP
elif [ "$pcpuINT" -gt "$cpuWarning" ]; then
set cpuTripped=TRUE
printf "\n\npid: $pid\tuser: $user\tcpu: $pcpu\tmem: $pmem\tCommand: $command\n" >> $serverLoadLog
printf "\n\npid: $pid\tuser: $user\tcpu: $pcpu\tmem: $pmem\tCommand: $command\n" >> /tmp/emailTMP
else
if [ $pid != "PID" ]; then
printf "
|%9s | %12s | %4s | %4s | %32s |" $pid $user $pcpu $pmem $command >> $serverLoadLog
fi
fi
done < $procTMP
if [ $cpuTripped = TRUE ]; then
printf "\nThe following commands have surpassed the CPU Usage threshold (%s)." "$cpuWarning%" >> /tmp/emailTMP
fi
}
# Main Loop
checkCPUUsage
checkMemoryUsage
emailReport
# End Clean!
rm -rf /tmp/emailTMP
rm -rf /tmp/sendmailTMP
rm -rf /tmp/procTMP
URL: http://code.cshaiku.com/code_server_load_emailer.php
Comments
 Subscribe to comments
                    Subscribe to comments
                
                