[cod] script cpu load

escapedturkey escapedturkey at escapedturkey.com
Mon Apr 5 11:05:56 EDT 2010


*/5 * * * * /usr/bin/process_monitor.sh & >/dev/null 2>&1

cat /usr/bin/process_monitor.sh
#!/bin/bash

# Disabled during maintenance 4 a.m. to 5 a.m.

hour=`date +%H`
if [ "$hour" = "04" ];
then
exit 0
fi

# This script assumes your top configuration is default.

# Who to e-mail when a process is killed.

contact="email at addresshere.com"

# Define the top command based load threshold percentage.

load="85"

# Define location of appending log file.

archive="/var/log/killed.log"

# Cycle 1 -- Checking to see if a process is using too much CPU.

cycle1=(`top -c -b -n 1 | grep -v grep | grep -v root | grep -v steam | 
grep -v bin | grep -v daemon | grep -v lp | grep -v sync | grep -v 
shutdown | grep -v halt | grep -v mail | grep -v news | grep -v uucp | 
grep -v operator | grep -v games | grep -v gopher | grep -v ftp | grep 
-v nobody | grep -v dbus | grep -v vcsa | grep -v rpm | grep -v 
haldaemon | grep -v netdump | grep -v nscd | grep -v sshd | grep -v rpc 
| grep -v rpcuser | grep -v nfsnobody | grep -v mailnull | grep -v smmsp 
| grep -v pcap | grep -v xfs | grep -v Mem: | grep -v Swap: | grep -v 
Cpu23 | grep -v Cpu22 | grep -v Cpu21 | grep -v Cpu20 | grep -v Cpu19 | 
grep -v Cpu18 | grep -v Cpu17 | grep -v Cpu16 | grep -v Cpu15 | grep -v 
Cpu14 | grep -v Cpu13 | grep -v Cpu12 | grep -v Cpu11 |grep -v Cpu10 | 
grep -v Cpu9 | grep -v Cpu8 | grep -v Cpu7 | grep -v Cpu6 | grep -v Cpu5 
| grep -v Cpu4 | grep -v Cpu3 | grep -v Cpu2 | grep -v Cpu1 | grep -v 
Cpu0 | grep -v Tasks | grep -v top | awk '$9 >= '$load' { print $1 }' | 
tail -n 1`)

# If nothing is found, exit.

if [ -z "$cycle1" ]; then

exit 0

fi

# Pausing for a bit. The process may be just having a temporary spike 
due to a restart or map change.

sleep 60

# Cycle 2 -- Checking again to see if the process is still using too 
much CPU.

cycle2=(`top -c -b -n 1 | grep -v grep | grep -v root | grep -v steam | 
grep -v bin | grep -v daemon | grep -v lp | grep -v sync | grep -v 
shutdown | grep -v halt | grep -v mail | grep -v news | grep -v uucp | 
grep -v operator | grep -v games | grep -v gopher | grep -v ftp | grep 
-v nobody | grep -v dbus | grep -v vcsa | grep -v rpm | grep -v 
haldaemon | grep -v netdump | grep -v nscd | grep -v sshd | grep -v rpc 
| grep -v rpcuser | grep -v nfsnobody | grep -v mailnull | grep -v smmsp 
| grep -v pcap | grep -v xfs | grep -v Mem: | grep -v Swap: | grep -v 
Cpu23 | grep -v Cpu22 | grep -v Cpu21 | grep -v Cpu20 | grep -v Cpu19 | 
grep -v Cpu18 | grep -v Cpu17 | grep -v Cpu16 | grep -v Cpu15 | grep -v 
Cpu14 | grep -v Cpu13 | grep -v Cpu12 | grep -v Cpu11 |grep -v Cpu10 | 
grep -v Cpu9 | grep -v Cpu8 | grep -v Cpu7 | grep -v Cpu6 | grep -v Cpu5 
| grep -v Cpu4 | grep -v Cpu3 | grep -v Cpu2 | grep -v Cpu1 | grep -v 
Cpu0 | grep -v Tasks | grep -v top | awk '$9 >= '$load' { print $1 }' | 
tail -n 1`)


# Comparing to see if the same process is using too much CPU, if so kill 
the process, if not, exit the script.

if [ "$cycle1" = "$cycle2" ];

then

# Logs killed process

top -c -b -n 1 | grep "$cycle2" | grep -v grep | head -n 1 >> $archive

# E-mail killed process

top -c -b -n 1 | grep "$cycle2" | grep -v grep | head -n 1 | mail -s 
"Excessive CPU Process killed at $HOSTNAME" $contact

# Kill the process

kill -9 "$cycle2"

fi

exit 0

#EOF

:)

On 4/5/2010 5:20 PM, pet wrote:
> Hi
>
> Has anyone of You script which monitor the cpu usage of the users
> processes, and if find one which reaches 100% during 5 sec it will kill
> it? Any help would be great.
> _______________________________________________
> cod mailing list
> cod at icculus.org
> http://icculus.org/mailman/listinfo/cod
>


More information about the cod mailing list