【发布时间】:2017-01-31 17:10:31
【问题描述】:
我遇到了一个不寻常的问题,涉及 AIX 7.1 上 ps -ef 命令的输出。
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="Support@email.address"
# 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 & Linux。
-
我希望你没有在你的脚本中使用 Q 主题行
“ps -ef”中的“花哨”引号 :-) 你在做 stdps -ef | grep -v grep | grep $pid的事情吗?也许您正在与进程表中的其他greps相交。不幸的是,AIX 没有可能有帮助的pgrep(或没有标准)。祝你好运。 -
我添加了检查输出的代码。我没有使用花哨的引号。我在检查之前将
ps -ef的输出写入文件以避免命令冲突。是的,我检查了我们的 AIX 安装是否使用了pgrep,但是很遗憾,它没有。 -
评论
rm $GREPPED_LINES这一行并检查该文件。线条和你预期的一样吗?您可以使用独立脚本处理该文件吗? -
我已添加代码以保留
$GREPPED LINES的内容,但自从添加后我无法复制此问题。