logファイルの最後数行~数十行だけを常時保存する方法はありませんか?

OS:Linux(組み込み)
あるアプリが固まるため、ログを出力させ固まった瞬間のログを保存したいが
ログを保存するための領域があまりないのと多量にログが出力されるため、固まった瞬間の数行~数十行のログのみを保存したいのですが何かいい方法はないでしょうか。

回答の条件
  • URL必須
  • 1人10回まで
  • 登録:2008/01/10 14:24:53
  • 終了:2008/01/17 14:25:02

回答(3件)

id:iwaamap No.1

iwaamap回答回数180ベストアンサー獲得回数102008/01/10 14:43:21

ポイント27pt

当方はSolarisがメインプラットフォームで

Linuxにはそれほど詳しくないのですが

以下のようなシェルを常駐させてはいかがでしょうか。


(1)tail コマンドで任意の数行を切り出して保存

(2)lsコマンドで対象ログのサイズチェック、直前のチェックとサイズ比較

サイズが変わっていなければ(=アプリが固まってログが更新されなくなった)終了

サイズが変わっていれば(アプリが動作中)処理を継続

(3)任意の時間sleep

(4)(1)に戻る


Manpage of TAIL

http://ktarn.www.linux.or.jp/JM/html/gnumaniak/man1/tail.1.html

id:garyo

ありがとうございます。

使っているアプリを apl だとして

apl > hoge.log

以下をsleepさせながら回せばいいのかも知れませんが

tail -f hoge.log >foo.log

問題なのはhoge.logのサイズが大きくなって保存しきれない点です(組み込みLinuxなのでファイル領域が小さい)

現在シリアルで接続していますが、コンソール画面に出すと動作が遅くなり、そのせいで異常動作になったのか原因の切り分けが出来なくなって困っています。

2008/01/10 14:56:54
id:b-wind No.2

b-wind回答回数3344ベストアンサー獲得回数4402008/01/10 14:53:57

ポイント27pt

logrotate を使ってはどうでしょうか?

logrotate


OS標準としては単位が日ごとになってしまいますが、設定ファイルを個別に用意して指定してやれば

任意の時間に実行できます。

特定の期間ごとまたはサイズごとにローテートさせ、古いファイルを削除することが簡単になります。

id:garyo

ありがとうございます。logrotateコマンドは動くみたいです。

以下のような方法で保存するlogに対して上記をどうやって使えばいいかが良く割りません。

apl > hoge.log

※perlは使えないようです。bashとawk,sedくらいしか入ってないと思います。


※すみません。 質問者コメントがおかしいみたいです。http://i.hatena.ne.jp/idea/18547

実験「1,2,3,4,5, ,あ,い,う,え,お」

2008/01/10 15:09:32
id:dev_zer0 No.3

dev_zer0回答回数332ベストアンサー獲得回数252008/01/10 15:38:41

ポイント26pt

http://www.linux.or.jp/JF/JFdocs/Bash-Prog-Intro-HOWTO-7.html

touch hoge.txt

while true; do sleep 1; tail hoge.txt >| hoge.tmp; mv hoge.tmp hoge.txt; done &

apl > hoge.log

で一秒ごとにログの最後を取るコマンドを裏で動かしてみるのはどうでしょう?

# 一時ファイルに書き出しているのは同じファイルに書くと変な挙動をするから

id:garyo

なるほど。ありがとうございます。

2008/01/10 15:44:50
  • id:iwaamap
    tailで必要な部分書き出したら
    hoge.logをガーベージしてしまうのはいかがでしょうか。
    OSの機能でリダイレクトするなら
    rmコマンドで削除しても問題ないような気もしますが
    それが無理なら以下のコマンドでEOFを書き込むことによって
    サイズを0にもできます。
    cat /dev/null > hoge.log

    ※solarisの話なので、できなかったらすみません。
  • id:b-wind
    組み込み系ですか。
    ネットワークにはつながっていますか?
    つながっていれば syslog で別のマシンに飛ばしてしまうのが手っ取り早いかと思います。
    その後の管理は回答内容と同じです。
    http://www.atmarkit.co.jp/flinux/rensai/root03/root03b.html
  • id:garyo
    iwaamapさん、
    ありがとうございます。上記の回答3の方法を試してみようと思います。
    b-windさん
    >ネットワークにはつながっていますか?
    シリアルコンソールだけですね。あと一定時間立つと省電力のためスリープします。

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

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

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

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