Files
mastering-unix-ss/chapter10/function_proc_watch
Fabio Scotto di Santolo 4cc88d2f6e initial commit
2020-07-28 19:28:25 +02:00

187 lines
5.9 KiB
Plaintext
Executable File

proc_watch ()
{
# set -x # Uncomment to debug this function
# This function does all of the process monitoring!
while : # Loop Forever!!
do
case $RUN in
'Y')
# This will run the startup_event_script, which is a function
if [[ $RUN_STARTUP_EVENT = 'Y' ]]
then
echo "STARTUP EVENT: Executing Startup Event Script..."\
> $TTY
echo "STARTUP EVENT: Executing Startup Event Script..."\
>> $LOGFILE
startup_event_script # USER DEFINED FUNCTION!!!
RC=$? # Check the Return Code!!
if (( "RC" == 0 ))
then
echo "SUCCESS: Startup Event Script Completed RC -\
${RC}" > $TTY
echo "SUCCESS: Startup Event Script Completed RC -\
${RC}" >> $LOGFILE
else
echo "FAILURE: Startup Event Script FAILED RC -\
${RC}" > $TTY
echo "FAILURE: Startup Event Script FAILED RC -\
${RC}" >> $LOGFILE
fi
fi
integer PROC_COUNT='-1' # Reset the Counters
integer LAST_COUNT='-1'
# Loop until the process(es) end(s)
until (( "PROC_COUNT" == 0 ))
do
# This function is a Co-Process. $BREAK checks to see if
# "Program Interrupt" has taken place. If so BREAK will
# be 'Y' and we exit both the loop and function.
read BREAK
if [[ $BREAK = 'Y' ]]
then
return 3
fi
PROC_COUNT=$(ps aux | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME \
| grep $PROCESS | wc -l) >/dev/null 2>&1
if (( "LAST_COUNT" > 0 && "LAST_COUNT" != "PROC_COUNT" ))
then
# The Process Count has Changed...
TIMESTAMP=$(date +%D@%T)
# Get a list of the PID of all of the processes
PID_LIST=$(ps aux | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME \
| grep $PROCESS | awk '{print $2}')
echo "PROCESS COUNT: $PROC_COUNT $PROCESS\
Processes Running ==> $TIMESTAMP" >> $LOGFILE &
echo "PROCESS COUNT: $PROC_COUNT $PROCESS\
Processes Running ==> $TIMESTAMP" > $TTY
echo ACTIVE PIDS: $PID_LIST >> $LOGFILE &
echo ACTIVE PIDS: $PID_LIST > $TTY
fi
LAST_COUNT=$PROC_COUNT
sleep $INTERVAL # Needed to reduce CPU load!
done
RUN='N' # Turn the RUN Flag Off
TIMESTAMP=$(date +%D@%T)
echo "ENDING PROCESS: $PROCESS END time ==>\
$TIMESTAMP" >> $LOGFILE &
echo "ENDING PROCESS: $PROCESS END time ==>\
$TIMESTAMP" > $TTY
# This will run the post_event_script, which is a function
if [[ $RUN_POST_EVENT = 'Y' ]]
then
echo "POST EVENT: Executing Post Event Script..."\
> $TTY
echo "POST EVENT: Executing Post Event Script..."\
>> $LOGFILE &
post_event_script # USER DEFINED FUNCTION!!!
integer RC=$?
if (( "RC" == 0 ))
then
echo "SUCCESS: Post Event Script Completed RC -\
${RC}" > $TTY
echo "SUCCESS: Post Event Script Completed RC -\
${RC}" >> $LOGFILE
else
echo "FAILURE: Post Event Script FAILED RC - ${RC}"\
> $TTY
echo "FAILURE: Post Event Script FAILED RC - ${RC}"\
>> $LOGFILE
fi
fi
;;
'N')
# This will run the pre_event_script, which is a function
if [[ $RUN_PRE_EVENT = 'Y' ]]
then
echo "PRE EVENT: Executing Pre Event Script..." > $TTY
echo "PRE EVENT: Executing Pre Event Script..." >> $LOGFILE
pre_event_script # USER DEFINED FUNCTION!!!
RC=$? # Check the Return Code!!!
if (( "RC" == 0 ))
then
echo "SUCCESS: Pre Event Script Completed RC - ${RC}"\
> $TTY
echo "SUCCESS: Pre Event Script Completed RC - ${RC}"\
>> $LOGFILE
else
echo "FAILURE: Pre Event Script FAILED RC - ${RC}"\
> $TTY
echo "FAILURE: Pre Event Script FAILED RC - ${RC}"\
>> $LOGFILE
fi
fi
echo "WAITING: Waiting for $PROCESS to \
startup...Monitoring..."
integer PROC_COUNT='-1' # Initialize to a fake value
# Loop until at least one process starts
until (( "PROC_COUNT" > 0 ))
do
# This is a Co-Process. This checks to see if a "Program
# Interrupt" has taken place. If so BREAK will be 'Y' and
# we exit both the loop and function
read BREAK
if [[ $BREAK = 'Y' ]]
then
return 3
fi
PROC_COUNT=$(ps aux | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME | grep $PROCESS | wc -l) \
>/dev/null 2>&1
sleep $INTERVAL # Needed to reduce CPU load!
done
RUN='Y' # Turn the RUN Flag On
TIMESTAMP=$(date +%D@%T)
PID_LIST=$(ps aux | grep -v "grep $PROCESS" \
| grep -v $SCRIPT_NAME \
| grep $PROCESS | awk '{print $2}')
if (( "PROC_COUNT" == 1 ))
then
echo "START PROCESS: $PROCESS START time ==>\
$TIMESTAMP" >> $LOGFILE &
echo ACTIVE PIDS: $PID_LIST >> $LOGFILE &
echo "START PROCESS: $PROCESS START time ==>\
$TIMESTAMP" > $TTY
echo ACTIVE PIDS: $PID_LIST > $TTY
elif (( "PROC_COUNT" > 1 ))
then
echo "START PROCESS: $PROC_COUNT $PROCESS\
Processes Started: START time ==> $TIMESTAMP" >> $LOGFILE &
echo ACTIVE PIDS: $PID_LIST >> $LOGFILE &
echo "START PROCESS: $PROC_COUNT $PROCESS\
Processes Started: START time ==> $TIMESTAMP" > $TTY
echo ACTIVE PIDS: $PID_LIST > $TTY
fi
;;
esac
done
}