2016-09-23 25 views
0

AIX 7.1でps -efコマンドの出力に関連する異常な問題があります。"ps -ef"(AIX 7.1)に記載されていないプロセス

シェルスクリプトは、この出力を解析してプロセスを監視します。私は、このリストから2つのプロセス(Perlプログラム)が省略されていることに気付きました。私がこのテーマで読んだことは、これは不可能だと言います。問題のプログラムは、crontab経由で午前6時に開始し、自ら終了する午後11時まで実行されます。私はすぐに監視スクリプトでは省略された後ps -efの出力をチェックし、それが表示されます。それは6時に開始された同じプロセスだ意味

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'と交差している可能性があります。残念なことに、AIXには役立つかもしれない 'pgrep'(またはstd)がありません。がんばろう。 – shellter

+0

出力を調べるコードを追加しました。私は豪華な引用符を使用していない。コマンドの競合を避けるために、 'ps -ef'の出力を調べてからファイルに書き出します。ええ、私は、AIXのインストールで 'pgrep'を使用しているかどうか確認しましたが、残念ですが、そうではありません。 –

答えて

0

これはあなたのケースではロングショットであるかもしれないが、私は、過去に「PS用-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パッチがこれを修正すると聞いたことがあります。私たちは現在サーバーにインストールしています。うまくいけば、これは再び起こりません。

関連する問題