Files
mastering-unix-ss/chapter16/proc_mon.ksh
Fabio Scotto di Santolo 4cc88d2f6e initial commit
2020-07-28 19:28:25 +02:00

153 lines
3.6 KiB
Bash
Executable File

#!/usr/bin/ksh
#
# SCRIPT: proc_mon.ksh
# AUTHOR: Randy Michael
# DATE: 02/14/2007
# REV: 1.1.P
# PLATFORM: Not Platform Dependent
#
# PURPOSE: This script is used to monitor a process to end
# specified by ARG1 if a single command-line argument is
# used. There is also a "verbose" mode where the monitored
# process is displayed and ARG2 is monitored.
#
# USAGE: proc_mon.ksh [-v] process-to-monitor
#
# EXIT STATUS:
# 0 ==> Monitored process has terminated
# 1 ==> Script usage error
# 2 ==> Target process to monitor is not active
# 3 ==> This script exits on a trapped signal
#
# REV. LIST:
#
# 02/22/2007 - Added code for a "verbose" mode to output the
# results of the .ps aux. command. The verbose
# mode is set using a "-v" switch.
#
# set -x # Uncomment to debug this script
# set -n # Uncomment to debug without any command execution
SCRIPT_NAME=`basename $0`
########################################################
############ DEFINE FUNCTIONS HERE #####################
########################################################
function usage
{
echo "\n\n"
echo "USAGE: $SCRIPT_NAME [-v] {Process_to_monitor}"
echo "\nEXAMPLE: $SCRIPT_NAME my_backup\n"
echo "OR"
echo "\nEXAMPLE: $SCRIPT_NAME -v my_backup\n"
echo "Try again...EXITING...\n"
}
########################################################
function exit_trap
{
echo "\n...EXITING on trapped signal...\n"
}
########################################################
################ START OF MAIN##########################
########################################################
################
# Set a trap...#
################
trap 'exit_trap; exit 3' 1 2 3 15
# First Check for the Correct Number of Arguments
# One or Two is acceptable
if (( $# != 1 && $# != 2 ))
then
usage
exit 1
fi
# Parse through the command-line arguments and see if verbose
# mode has been specified. NOTICE that we assign the target
# process to the PROCESS variable!!!
# Embedded case statement...
case $# in
1) case $1 in
'-v') usage
exit 1
;;
*) PROCESS=$1
;;
esac
;;
2) case $1 in
'-v') continue
;;
esac
case $2 in
'-v') usage
exit 1
;;
*) PROCESS=$2
;;
esac
;;
*) usage
exit 1
;;
esac
# Check if the process is running or exit!
ps aux | grep "$PROCESS" | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME >/dev/null
if (( $? != 0 ))
then
echo "\n\n$PROCESS is NOT an active process...EXITING...\n"
exit 2
fi
# Show verbose mode if specified...
if (( $# == 2 )) && [[ $1 = "-v" ]]
then
# Verbose mode has been specified!
echo "\n"
# Extract the columns heading from the ps aux output
ps aux | head -n 1
ps aux | grep "$PROCESS" | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME
fi
##### O.K. The process is running, start monitoring...
SLEEP_TIME="1" # Seconds between monitoring
RC="0" # RC is the Return Code
echo "\n\n" # Give a couple of blank lines
echo "$PROCESS is currently RUNNING...`date`\n"
####################################
# Loop UNTIL the $PROCESS stops...
while (( RC == 0 )) # Loop until the return code is not zero
do
ps aux | grep $PROCESS | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME >/dev/null 2>&1
if (( $? != 0 )) # Check the Return Code!!!!!
then
echo "\n...$PROCESS has COMPLETED...`date`\n"
exit 0
fi
sleep $SLEEP_TIME # Needed to reduce CPU Load!!!
done
# End of Script