人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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

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

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

●質問者: bar77
●カテゴリ:ウェブ制作
✍キーワード:ABC DAEMON grep Linux txt
○ 状態 :終了
└ 回答数 : 5/5件

▽最新の回答へ

1 ● EddyYamanaka
●18ポイント

http://cyberam.dip.jp/linux_command/command/com_main.html

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

◎質問者からの返答

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


2 ● limura
●18ポイント

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

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

◎質問者からの返答

なるほど。

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


3 ● zja
●30ポイント

次のようなシェルスクリプト(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 することができます。

◎質問者からの返答

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

ありがとうございます。


4 ● ke_ishi
●29ポイント

http://www.linux.or.jp/JM/html/GNU_bash/man1/bash.1.html

Manpage of BASH

tailの直後に

echo $! > /tmp/pid.text

としておけば

kill `/tmp/pid.txt`

で落とせます。

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

bash限定?ですが

◎質問者からの返答

ありがとうございます。


5 ● ke_ishi
●1ポイント

書き間違えたかも。

kill `cat /tmp/pid.text`

といいたかったorz

◎質問者からの返答

どうも!

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ