2016-09-23 2 views
0

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 
+1

문제는 모니터 스크립트의 버그 일 수 있습니다. 그렇다면 질문에 스크립트를 포함시켜야합니다. 그렇지 않다면 아마도 프로그래밍 문제가 아니며 [unix.se]에 더 적합 할 것입니다. –

+0

스크립트에서 Q 제목 줄''ps -ef ''에있는 "멋있는"따옴표를 사용하지 않기를 바랍니다 :-) std'ps -ef | grep -v grep | grep $ pid' 것? 프로세스 테이블에있는 다른 greps과 교차하고있을 수도 있습니다. Unfortuately, AIX는 도움이 될만한'pgrep' (또는 std가 아님)을 가지고 있지 않습니다. 행운을 빕니다. – shellter

+0

출력을 검사하는 코드를 추가했습니다. 멋진 따옴표를 사용하지 않습니다. 명령 충돌을 피하기 위해 파일을 검사하기 전에'ps -ef'의 출력을 파일에 씁니다. 예, 저는 AIX 설치시'pgrep'을 사용하는지 확인했습니다. 아아, 그렇지 않습니다. –

답변

0

이것은 귀하의 경우 긴 샷이 될 수도 있지만 나는 과거에 "추신 -ef"와 같은 경험을했다 : 난 단지 두 번이 문제를 발견했지만, 모두 최근 2 개월되었습니다 본 적이있는 정확한 OS 유형을 기억하지 못하지만 스크립트는 모든 Linux, AIX, Solaris 및 HP-UX에서 작동해야했습니다.

터미널을 사용하지 않고 실행되는 스크립트에서 "ps -ef"출력을 사용할 경우 특정 열 수로 제한 될 수 있습니다. user, pid, ppid, cputime 열은 동적이며 데이터가 예약 된 공간보다 큰 경우 때때로 형식을 위반합니다. 예를 들어, 프로세스의 PID가 커지면 "ps -ef"로 표시된 제한된 수의 열에 나타나지 않도록 프로세스 이름이 "잘릴"수 있으므로 모니터 스크립트가 실패합니다 .

"ps -ef"출력이 포함 된 파일을 유지하고이 문제인지 확인할 수 있습니다. 문제가 발생할 때까지 기다릴 필요가 없습니다. 파일에 긴 프로세스 이름이 있는지 확인하십시오. (찾고있는 프로세스보다 길면 좋습니다.)

이 문제의 해결 방법은 다음과 같이 사용할 수있는 열 수를 충분히 지정하는 것입니다. COLUMNS=8192 ps -ef > file.out 변수가이 용도로만 설정되었습니다.

+0

프로세스 목록으로 출력 파일을 검사했는데 길이가 2662자인 행이 있습니다. 내가 찾는 프로세스는 길이가 123 자이므로 아무 것도 잘라 버린 것이 아닌지 의심 스럽다. 그래도 제안을 주셔서 감사합니다. –

0

저는 서버 지원 팀으로부터 AIX 7.1 TL4 SP4 패치가이를 수정한다고 들었습니다! 지금 서버에 설치하고 있습니다. 다시는 발생하지 않을 것입니다.

관련 문제