Linux上でのバッチ処理の質問です。


あるデーモンが吐くログのうち、毎日午前2時〜7時に書き出される行のうち、文字列”ABC”を含む行を抽出したいと考えています。

今考えている方法は、2時にcronで、
`tail -f daemon.log|grep ”ABC” > result.txt` を起動して、
7時にこれをkill出来ればいいかなぁと思っているのですが、killの方法がわかりません。
`killall tail`では他の無関係なtailまで死んでしまいます。
何かよい方法はないでしょうか?

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2004/12/16 06:45:31
  • 終了:--

回答(5件)

id:EddyYamanaka No.1

EddyYamanaka回答回数385ベストアンサー獲得回数12004/12/16 08:12:29

ポイント18pt

linuxは詳しくないのですが、時間指定でコマンドが起動できるなら、2時にログファイルを別名でバックアップして、7時に diff を取って、grep すればよいのではないでしょうか?

id:bar77

ログが巨大なので、それは無理っぽいです。

2004/12/16 09:02:02
id:mojimojikun No.2

limura回答回数9ベストアンサー獲得回数12004/12/16 08:45:36

ポイント18pt

kill `ps auxww | grep -v grep | grep ’tail -f daemon.log$’ | awk ’{ print $2 }’`

という感じでいかがでしょうか。ps の結果から、目的の tail -f daemon.log だけを取り出して kill するという感じです。

id:bar77

なるほど。

他にも方法があればお願いします。

2004/12/16 09:02:53
id:zja No.3

zja回答回数4ベストアンサー獲得回数02004/12/16 10:50:04

ポイント30pt

次のようなシェルスクリプト(test.sh)を作って

cronで実行させます。

!/bin/sh

echo $$ > pid.dat

tail -f daemon.log|grep ”ABC” > result.txt

#end

pid.dat というファイルに、シェルスクリプトのプロセスIDが

記録されるので、後で

kill -9 `cat pid.dat`

を実行すると、test.sh だけを kill することができます。

id:bar77

なるほど、PIDを記録しておけばいいのですね。

ありがとうございます。

2004/12/17 10:50:55
id:ke_ishi No.4

ke_ishi回答回数269ベストアンサー獲得回数02004/12/16 17:19:57

ポイント29pt

tailの直後に

 echo $! > /tmp/pid.text

としておけば

 kill `/tmp/pid.txt`

で落とせます。

$! は直前に実行したバックグラウンドプロセスのPIDです。

bash限定?ですが

id:bar77

ありがとうございます。

2004/12/17 10:51:12
id:ke_ishi No.5

ke_ishi回答回数269ベストアンサー獲得回数02004/12/16 17:31:35

ポイント1pt

書き間違えたかも。

kill `cat /tmp/pid.text`

といいたかったorz

id:bar77

どうも!

2004/12/17 10:51:19

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません