「ログ監視」の編集履歴(バックアップ)一覧はこちら
「ログ監視」(2012/01/14 (土) 23:55:10) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
複数のプロセスを起動したいが、起動順序に依存関係があるため、前のプロセスが起動してからでないと、次のプロセスを起動してもエラー終了してしまう。
前のプロセスのログを監視して、起動処理が終了したときにでるメッセージが出力されたら次のプロセスを起動するようにした。
その際、監視用に以下の関数を作成した。
# logwatch ファイルパス 検索文字列
logwatch(){
tail --follow=name "$1" | grep --line-buffered "$2" | while read line
do
#echo $line
pkill -P $$ tail
break
done
}
tailに「--follow=name」を指定するのは、ログが再作成されてもオープンし直すようにである。
また、grepの「--line-buffered」は結果をバッファリングせず、即座に後続のコマンドにパイプでつなぐためである。
また、該当メッセージがみつかれってもtailを終了させwhileから抜けないと関数が終了しないため、pkillでtailを終了させ、その後にbreakしている。
pkillでは他にtailが実行中でもよいように、「-P $$」で自分で起動したtailのみを終了している。
該当メッセージが出力されるたびに何か処理をさせたければ、do~done内に必要な処理を書いてあげればよい。
また、単に該当メッセージが出力されたら終了すればよいなら、以下のような関数でもよい。
# logwatch ファイルパス 検索文字列
logwatch2(){
tail --follow=name "$1" | (grep -q "$2"; pkill -P $$ tail)
}
複数のプロセスを起動したいが、起動順序に依存関係があるため、前のプロセスが起動してからでないと、次のプロセスを起動してもエラー終了してしまう。
前のプロセスのログを監視して、起動処理が終了したときにでるメッセージが出力されたら次のプロセスを起動するようにした。
その際、監視用に以下の関数を作成した。
# logwatch ファイルパス 検索文字列
logwatch(){
tail --follow=name "$1" | grep --line-buffered "$2" | while read line
do
#echo $line
pkill -P $$ tail
break
done
}
tailに「--follow=name」を指定するのは、ログが再作成されてもオープンし直すようにである。
また、grepの「--line-buffered」は結果をバッファリングせず、即座に後続のコマンドにパイプでつなぐためである。
また、該当メッセージがみつかれってもtailを終了させwhileから抜けないと関数が終了しないため、pkillでtailを終了させ、その後にbreakしている。
pkillでは他にtailが実行中でもよいように、「-P $$」で自分で起動したtailのみを終了している。
該当メッセージが出力されるたびに何か処理をさせたければ、do~done内に必要な処理を書いてあげればよい。
また、単に該当メッセージが出力されたら終了すればよいなら、以下のような関数でもよい。
# logwatch ファイルパス 検索文字列
logwatch2(){
tail --follow=name "$1" | (grep -q "$2"; pkill -P $$ tail)
}
なおtailを使うので、起動してすぐにたくさんのログが出力されるプログラムだと最初のtailですでに過ぎてしまい監視できなくなるので、注意が必要。
プログラム起動前になければログファイルを作成して監視を先にするとよいかも。
----
#comment()
----