プロセスPIDの変更の監視

プロセスPIDの変更の監視

常に実行する必要があるサービスがあります。サービスがいつ停止するか再起動するかを知りたいです。

サービスのPID参照を検討しました。再起動すると新しいPIDが得られます。だからpidが変わったら警告やメールを送りたいです。これを行う最も侵害的な方法は何ですか?

これで、5分ごとにファイルにpidを書き込むcron操作ができました。このファイルのpid変更を監視するためのLinuxツールはありますか?それとも、外部で実行されているPythonスクリプトなど、このファイルを抽出してそのように監視できる他のものが必要ですか?

答え1

ヴィンス氏、継続的なモニタリングのために、Nagiosなどのオープンソースソリューションを見てみることをお勧めします。あなたの質問について、以下のBASHスクリプトprog_stat.shは毎秒DATEとPIDをファイルに記録し、スクリプトに追加することでPIDの変更を解析し、それに続くアクションを追加できます。 CTRL-Cを殺す

Nagiosの開発に使用するマシンがあります。このスクリプトは、毎秒そのマシンのNagios PIDをチェックします。睡眠を変えてテストの頻度を変えてください。

    #!/bin/bash
    PROG=Nagios          
    LOG=/home/user/nagios_pid.log   
    echo "" > $LOG             
    while true; do    
    PID=`ps ax | grep -i "$PROG" | awk 'NR==1{print $1}'`                  
    echo `date -u` " "  $PID >> $LOG                      
    sleep 1                                               
    done                 
    exit                   

スクリプト出力

    [user ~]#cat nagios_pid.log
    Sat Mar 30 11:15:50 UTC 2019   1171
    Sat Mar 30 11:15:51 UTC 2019   1171
    Sat Mar 30 11:15:52 UTC 2019   1171
    Sat Mar 30 11:15:53 UTC 2019   1171
    Sat Mar 30 11:15:54 UTC 2019   1171
    Sat Mar 30 11:15:55 UTC 2019   1171
    Sat Mar 30 11:15:56 UTC 2019   1261
    Sat Mar 30 11:15:57 UTC 2019   1261
    Sat Mar 30 11:15:58 UTC 2019   1261
    Sat Mar 30 11:15:59 UTC 2019   1261

変更の整理:

   [user ~]# sort -k 7,7 -u  nagios_pid.log
    Sat Mar 30 11:15:50 UTC 2019   1171
    Sat Mar 30 11:15:56 UTC 2019   1261

これで、潜在的に長いファイルを手動で解析する必要なく、サービスが再起動された時期を確認できます。

- 表示

答え2

システムがsystemdによって制御され、多くの最新のシステムが制御されている場合(systemctlこの場合を確認するには入力してください)、サービスの再起動時にアクションを実行するように構成できます。この回答ServerFaultには1つの例しかありません。

別の解決策は、サービスが終了したときにそれを知らせるシェルスクリプトでサービスをラップすることです。ただし、プロセスが独自にデーモン化されている場合は機能しません。

関連情報