This script logs CPU load for a given process, every n seconds into a file
Requires : bash, ps, awk
Examples :
psmon <process name> [delay [logfile]]
psmon sshd→ logs %CPU load from process sshd, every 5 seconds, to file psmon.log.[day]
psmon q3ded 10 q3ded.log → logs %CPU load from process q3ded, every 10 seconds, to file q3ded.log
-
#!/bin/bash
-
-
if [ -z $1 ] ; then
-
echo "Monitor a cpu load for a given process, every n seconds"
-
echo "Usage : `basename $0` <process name> [delay [logfile]]"
-
echo " [delay] : defaults to 5 seconds"
-
echo " [logfile] : defaults to psmon.log.yymmdd.hhmmss"
-
echo " if you specify a logfile, you MUST specify a delay"
-
echo "Example : psmon q3ded 10 q3dedmonitor.log"
-
echo "Example : psmon q3ded"
-
exit 0
-
fi
-
-
PROCESS=$1
-
-
if $(ps -C "$PROCESS">/dev/null) ; then
-
# process exists
-
WARNING=""
-
else
-
# process doesnt exist
-
WARNING="Warning : $PROCESS NOT running at the moment !"
-
fi
-
-
-
LOGFILE=$3
-
if [ -z $3 ] ; then
-
LOGFILE=psmon.log.$(date +%Y%m%d.%H%M%S)
-
fi
-
-
DELAY=$2
-
if [ -z $2 ] ; then
-
DELAY=5
-
fi
-
-
C="\033[1m"
-
N="\033[0m"
-
-
echo -e "${N}Monitoring $C$PROCESS$N cpu load, every $C$DELAY$N s, to file $C$LOGFILE"
-
echo -e $WARNING
-
-
echo "# psmon logfile"> $LOGFILE
-
echo "# Process name : $PROCESS">> $LOGFILE
-
echo "# Started : $(date +%D\ \@\ %X)">> $LOGFILE
-
echo "">> $LOGFILE
-
-
# Now logging the stuff
-
-
while true; do
-
ps -C "$PROCESS" -o "pcpu" | awk '{a+=$1} END {print a}'>> $LOGFILE
-
sleep $DELAY
-
done
Shorter URL
Want to share or tweet this post? Please use this short URL: http://ozh.in/r

thought, on 04/May/04 at 12:14 am # :
FirstPost
(au cas ou)