我有一個涉及來自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',但是,事實並非如此。 –