私が知りたいのは、最後の2-3再起動の前にプロセスに割り当てられたPIDsです。
シナリオは、この特定のプロセスがクラッシュした後、ログファイルが生成され、プロセスのPIDがログファイルの名前に連結されるです。 hs_err_PIDsという名前の5つのログファイルがあります。私は少し混乱しているので、これらのPIDが問題のプロセスに割り当てられているかどうかを確認したいと思います。
私にできる方法はありますか?
この情報はシステムログファイルで見つけることができます/var/log/messages
、/var/log/syslog
。一部のプロセスは、起動時にシステムログにメッセージを出力します。たとえば、squidは次のように出力します。
May 8 00:00:00 proxy squid[7274]: Squid Parent: child process 28819 started
プロセスがそのような情報をログに記録する場合、7274のような古いPIDを知ることができます。
別の可能性は、プロセスが停止したときにsegfaultのようなエラーが発生した場合です。次のようなログが見つかります。
May 8 00:00:00 proxy kernel: [1075746.767514] squid[24442]: segfault at 20 ip 00000000005bae26 sp 00007fff144918e0 error 4 in squid[400000+264000]
このようなログレコードでPIDを見つけることもできます24442。
今後のケースで、後で見つけたい場合は、そのような情報をログに記録する必要があります。
アプリケーションがPIDをログファイルに書き込まない限り、この情報を遡及的に取得することはできません。今後、ラッパースクリプトを記述してアプリケーションを起動し、PIDをファイルに記録するか、アカウンティングを有効にすることができます。
単純なラッパーは
yourcommand &
echo $! >>/path/to/pid_history.log
この場所のどこかにログエントリがない場合(プログラム自体または開始スクリプトによって作成されます)、この情報の標準のログ記録がないため、この情報を取得する方法はありません。
# ps ax > /tmp/process.list; for i in `seq 1 600`; do echo $i >> /tmp/plog; date >> /tmp/plog; ps ax | diff /tmp/process.list - >> /tmp/plog; sleep 1; done; ping -a 127.0.0.1
この構成では、毎秒10分間、プロセスリストの差異をファイル/ tmp/plogに収集します。ロギングが終了すると、コンソールから信号が送信されます。
これをrc.localファイルに追加して、サーバーの起動直後にロギングを開始できます。