AIX 7.1에서 ps -ef
명령의 출력과 관련된 비정상적인 문제가 있습니다."ps -ef"(AIX 7.1)에 나열되지 않은 프로세스
쉘 스크립트는이 출력을 구문 분석하여 프로세스를 모니터합니다. 나는 두 차례에 걸쳐이 목록에서 프로세스 (Perl 프로그램)가 생략되었음을 알았다. 주제에 관해 읽은 모든 것은 이것이 가능하지 않다고 말합니다. 문제의 프로그램은 오전 6시에 crontab을 통해 시작하고 자체 종료 될 때까지 오후 11 시까 지 실행됩니다. I 즉시 모니터 스크립트 생략 후 ps -ef
의 출력을 선택하고, 그 표시는 6am에 시작된 동일한 프로세스의 의미
user 1249864 9569338 0 06:00:00 - 0:19 /usr/bin/perl -w /path/to/omittedProgram.pl
을 .... 프로그램이 종료되지 않고 다시 시작되었습니다.
출력이 ps -ef
출력에서 생략 된 원인은 무엇입니까?
편집 : 약 5 년간 성공적으로 실행 된 ps -ef
의 출력을 검사하는 프로그램입니다. (
# 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과 교차하고있을 수도 있습니다. Unfortuately, AIX는 도움이 될만한'pgrep' (또는 std가 아님)을 가지고 있지 않습니다. 행운을 빕니다. – shellter
출력을 검사하는 코드를 추가했습니다. 멋진 따옴표를 사용하지 않습니다. 명령 충돌을 피하기 위해 파일을 검사하기 전에'ps -ef'의 출력을 파일에 씁니다. 예, 저는 AIX 설치시'pgrep'을 사용하는지 확인했습니다. 아아, 그렇지 않습니다. –