我有一个涉及来自AIX 7.1上的ps -ef
命令的输出的异常问题。未在“ps -ef”(AIX 7.1)上列出的进程
shell脚本通过解析此输出来监视进程。我注意到有两次从这个列表中删除了一个进程(一个Perl程序)。我读过的关于这个主题的一切都说这是不可能的。有问题的程序从早上6点开始通过crontab运行,直到晚上11点自我终止。我检查的ps -ef
输出通过监控脚本省略后,并显示:
user 1249864 9569338 0 06:00:00 - 0:19 /usr/bin/perl -w /path/to/omittedProgram.pl
...这意味着它是在早上6点开始了同样的过程。该程序没有终止,然后重新启动。
是什么导致它从ps -ef
输出中被省略?
编辑:这是检查ps -ef
的输出程序,该程序已成功运行五年左右。我只注意到这个问题了两次,但都已经在过去2个月:
# 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
该问题可能是您的监视器脚本中的一个错误;如果是这样,你需要在你的问题中包含脚本。如果没有,这可能不是一个编程问题,并且会更适合[unix.se]。 –
我希望你不要在你的脚本中使用在你的Q主题行“ps -ef”中找到的“奇特”引号:-)你是否正在执行std'ps -ef | grep -v grep | grep $ pid'的东西?也许你正在处理表中与其他'greps'相交。不幸的是,AIX没有'pgrep'(或不是std),这可能会有所帮助。祝你好运。 – shellter
我添加了检查输出的代码。我没有使用花哨的语录。在检查文件之前,我将'ps -ef'的输出写入文件以避免命令冲突。 Ya,我检查了我们的AIX安装是否使用'pgrep',但是,事实并非如此。 –