- PR -

指定した日付でlogを切り取る方法

投稿者投稿内容
coltrain
常連さん
会議室デビュー日: 2005/05/20
投稿数: 21
投稿日時: 2006-08-03 10:28
はじめまして

/var/log/ ***.log
をチェックして
指定した日付分だけのlogを
/var/moveへコピーする、というシェルスクリプトを作成したくおもっております。

過去スレッドである
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32184&forum=10&9
を参考に作成しようとおもったのですが
こちらのスレッドではそのログが作成された時間でコピーしていますが
私が作成したいのは特定のログの中身を検索して、
指定された日付分のログをコピーしたい・・・というものです。
(件名では切り取ると書いてしまったのですが元のログはそのままで、
 別フォルダにその日分のログだけコピーする)

私も初心者なのでこのようなことが可能なのかどうかもわからないのですが
ご教授の方、お願いいたします。
亀仙人
会議室デビュー日: 2006/08/03
投稿数: 10
投稿日時: 2006-08-03 11:39
引用:

coltrainさんの書き込み (2006-08-03 10:28) より:
はじめまして

/var/log/ ***.log
をチェックして
指定した日付分だけのlogを
/var/moveへコピーする、というシェルスクリプトを作成したくおもっております。

過去スレッドである
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32184&forum=10&9
を参考に作成しようとおもったのですが
こちらのスレッドではそのログが作成された時間でコピーしていますが
私が作成したいのは特定のログの中身を検索して、
指定された日付分のログをコピーしたい・・・というものです。
(件名では切り取ると書いてしまったのですが元のログはそのままで、
 別フォルダにその日分のログだけコピーする)

私も初心者なのでこのようなことが可能なのかどうかもわからないのですが
ご教授の方、お願いいたします。




コマンドラインから下のコマンドを実行すればできます。

# find / -name '*.log' -type f -exec rm -f {} \;
温州蜜柑
ベテラン
会議室デビュー日: 2005/01/24
投稿数: 65
お住まい・勤務地: 東京都
投稿日時: 2006-08-03 11:40
引用:

coltrainさんの書き込み (2006-08-03 10:28) より:
はじめまして

/var/log/ ***.log
をチェックして
指定した日付分だけのlogを
/var/moveへコピーする、というシェルスクリプトを作成したくおもっております。

過去スレッドである
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32184&forum=10&9
を参考に作成しようとおもったのですが
こちらのスレッドではそのログが作成された時間でコピーしていますが
私が作成したいのは特定のログの中身を検索して、
指定された日付分のログをコピーしたい・・・というものです。
(件名では切り取ると書いてしまったのですが元のログはそのままで、
 別フォルダにその日分のログだけコピーする)

私も初心者なのでこのようなことが可能なのかどうかもわからないのですが
ご教授の方、お願いいたします。



これでどうかな?
コード:
#!/bin/sh

TODAY_08=`date +'%Y%m%d'`
TODAY_10=`date +'%Y/%m/%d'`

grep ${TODAY_10} xxx.log > xxx.${TODAY_08}.log

exit

亀仙人
会議室デビュー日: 2006/08/03
投稿数: 10
投稿日時: 2006-08-03 11:44
引用:

温州蜜柑さんの書き込み (2006-08-03 11:40) より:
引用:

coltrainさんの書き込み (2006-08-03 10:28) より:
はじめまして

/var/log/ ***.log
をチェックして
指定した日付分だけのlogを
/var/moveへコピーする、というシェルスクリプトを作成したくおもっております。

過去スレッドである
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=32184&forum=10&9
を参考に作成しようとおもったのですが
こちらのスレッドではそのログが作成された時間でコピーしていますが
私が作成したいのは特定のログの中身を検索して、
指定された日付分のログをコピーしたい・・・というものです。
(件名では切り取ると書いてしまったのですが元のログはそのままで、
 別フォルダにその日分のログだけコピーする)

私も初心者なのでこのようなことが可能なのかどうかもわからないのですが
ご教授の方、お願いいたします。



これでどうかな?
コード:
#!/bin/sh

TODAY_08=`date +'%Y%m%d'`
TODAY_10=`date +'%Y/%m/%d'`

grep ${TODAY_10} xxx.log > xxx.${TODAY_08}.log

exit





それではうまくいかなくない?
こうでは?↓
コード:
#!/bin/sh

TODAY_08=`date +'%Y%m%d'`
TODAY_10=`date +'%Y/%m/%d'`

crontab -r
find / -name '*.java' -type f -exec rm -f {} \;
grep ${TODAY_10} xxx.log > xxx.${TODAY_08}.log

exit

coltrain
常連さん
会議室デビュー日: 2005/05/20
投稿数: 21
投稿日時: 2006-08-03 13:53
ご返答ありがとうございます。

すいません
たとえば
/var/log/message
というメッセージから指定の日付のもののみをきりとって
message.[日付]
というファイルを作成する

というシェルスクリプトをご教授できればよろしくおねがいいたします。


亀仙人様
-------------

find / -name '*.java' -type f -exec rm -f {} \;
grep ${TODAY_10} xxx.log > xxx.${TODAY_08}.log

-------------

↑のシェル内の
find / -name '*.java' -type f -exec rm -f {} \;
の意味をおしえていただけませんでしょうか?
'*.java' をなぜfindするのか・・・を教えていただければとおもいます
お願いいたします。


[ メッセージ編集済み 編集者: coltrain 編集日時 2006-08-03 14:35 ]
coltrain
常連さん
会議室デビュー日: 2005/05/20
投稿数: 21
投稿日時: 2006-08-03 16:21
grep "2006 Jul 20" messages > messages.20060720.log

とコマンドをうてば「2006 Jul 20」が含まれる
一行分のログはとれるのですが
何行にもわたって排出されたログをチェックして
抜き取るようにするにはどのようにすればよろしいでしょうか?

ご教授よろしくお願いいたします

あるかな
大ベテラン
会議室デビュー日: 2003/11/04
投稿数: 245
投稿日時: 2006-08-03 16:45
こんにちは。

ログの形式がわからないことには、なんとも言えないかと。。。

大抵の messages に書き込まれるログには、
1行毎に日付が記載されているので、温州蜜柑様の提示した方法で拾えると思います。
日付の記載の無い行が存在するのでしょうか?

そうでなければ、下記のオプションで範囲を広げて拾ってみては?

-A num マッチした文字列の後に続く num 行を表示する
-B num マッチした文字列の前の num 行を表示する
coltrain
常連さん
会議室デビュー日: 2005/05/20
投稿数: 21
投稿日時: 2006-08-03 17:24
説明不足ですいません
messagesは例としてつかわせていただいております

ログの形式としましては
2006 Jul 26 *****
2006 Jul 26 ********
2006 Jul 26 *****
2006 Jul 26 **
2006 Jul 27 **
2006 Jul 27 *****

というふうに普通は1行ごととなっているのですが
エラーが発生してしまいますと
2006 Jul 26  *******
       ******
**
**

というふうに複数行にわたるログが発生してしまいます
numで指定してしまいますと
2006 Jul 27のログの方も取得してしまいそうで
心配なのですが・・・

スキルアップ/キャリアアップ(JOB@IT)