0

私はこのようないくつかの監視ルーチンを書いています:

 tail -f /var/log/router-home.log | while read line ; do
   echo "$line" | egrep "MTF_SIP" | cut -b 28- | sed -u 's/#012/\n/g' \
   | egrep "IPP-->Received Event|rvCCConnMdmNewDigitCB|rvCCCallHandleOutOfBandDTMF" \
   | cut -d " " -f 15
 done > /tmp/phone/status &

しかし、ログローテーションが発生するたびに/var/log/router-home.log、このルーチンに複数のプロセスが存在するプロセスの強制終了が変更されます。ps -e|grep tail

このルーチンを監視し、終了したときに再起動するにはどうすればよいですか?

4

2 に答える 2

6

記述子ではなくファイルを追跡したい場合(つまりlogrotate、下に移動した場合でも最新のファイルを取得できるようにするため)、tail -F基本的に次のいずれかを使用できます。

tail --follow=name --retry

私が通常行うことは、実行することです。

tail -F somefile 2>/dev/null

そのため、ファイルが変更されてもエラーメッセージは表示されません。somefileが存在しないことを確認してからそのコマンドを実行することで、これを試すことができます。次に、別のセッションから:

echo pax is a >somefile
rm somefile
echo wonderful person >somefile

これらの両方の行が出力に表示されtailます。

このソリューションでは、プロセスが停止することはないため、プロセスを再起動する必要はありません。

于 2012-12-02T09:53:30.937 に答える
1

スクリプトをシステムデーモンに変換することをお勧めします(たとえば、 Debianでこれを行うためのヒントを次に示します)。また、プロセスのログ記録と制御を適切に行うことができます。

また、目的のシグナルをトラップし(SIGHUPかもしれませんか?)、終了する代わりに、ログファイルを再度開きます(プロセスを再開します)。

trap ". /path/to/my-script.sh" SIGHUP

ここ/path/to/my-script.shで、は指定されたコードを含むファイルです。

于 2012-12-02T10:01:42.133 に答える