153 lines
3.6 KiB
Bash
Executable File
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
|