Eu tenho um problema incomum envolvendo a saída do comando ps -ef
no AIX 7.1.
Um script de shell monitora processos analisando essa saída. Eu notei em duas ocasiões que um processo (um programa Perl) foi omitido desta lista. Tudo que li sobre o assunto diz que isso não é possível. O programa em questão começa via crontab às 6h e vai até as 23h, quando ele termina. Eu verifiquei a saída de ps -ef
imediatamente depois de ser omitido pelo script de monitor, e ele exibe:
user 1249864 9569338 0 06:00:00 - 0:19 /usr/bin/perl -w /path/to/omittedProgram.pl
... o que significa que é o mesmo processo iniciado às 6 da manhã. O programa não terminou e, em seguida, reiniciou.
O que está causando a omissão da ps -ef
saída?
Este é o programa que examina a saída de ps -ef
, que está sendo executada com sucesso há cerca de cinco anos. Eu só notei este problema duas vezes, mas ambos foram nos últimos 2 meses:
# set global variables
PROCESS_FILE=/tmp/processList.txt
TEMP_FILE=/tmp/greppedProcesses.tmp
BOX='uname -n'
DATE='date'
EMAIL_LIST="[email protected]"
# Get list of running processes
ps -ef > $PROCESS_FILE
checkProcess() {
PROCESS_NAME=$1
PROCESS_ABBREVIATION=$2
PROCESS_COUNT=$3
UNIQUE_PROCESS_IDENTIFIER=$4
GREPPED_LINES=$TEMP_FILE-$PROCESS_ABBREVIATION
grep $UNIQUE_PROCESS_IDENTIFIER $PROCESS_FILE | grep -v grep > $GREPPED_LINES
NUM='cat $GREPPED_LINES | wc -l'
if [[ $NUM -ne $PROCESS_COUNT ]]
# Incorrect number of processes running!
then MESSAGE='printf "The \"$PROCESS_NAME\" process count is %1d, but it should be $PROCESS_COUNT!!!" $NUM'
echo "Monitor - starting on $DATE\n\n$MESSAGE\n\n'cat $GREPPED_LINES'" | mail -s "Problem with $PROCESS_NAME on $BOX" $EMAIL_LIST
fi
# Delete the temp file
rm $GREPPED_LINES
}
checkProcess "Full Name of Program" "Program Abbreviation" <expected number of processes running> "Unique string to identify program in ps output"
checkProcess ... (for other processes) ...
exit 0
Além disso, nossa instalação do AIX não possui pgrep
.