トップページへ

tailコマンドでファイルがローテートされても追従する方法

小粋空間 » Linux » tailコマンドでファイルがローテートされても追従する方法

tailコマンドでファイルがローテートされても追従する方法を紹介します。

1.問題点

tailコマンドでapacheのファイルを監視しています。

# cd /etc/httpd/logs/
# tail -f access_log

ログがローテートされると監視が途切れてしまいますが、方法が分かりません。

ということで、tailコマンドでファイルがローテートされても追従する方法を紹介します。

2.tailコマンドでファイルがローテートされても追従する

tailコマンドでファイルがローテートされても追従するには"-F"オプションを使用します。

# cd /etc/httpd/logs/
# tail -F access_log

3.サンプル

下記のサンプルで追従することを確認できます。

ターミナルAでファイル「test.txt」に任意の文字を書き込み、ターミナルBでtailを開始します。

ターミナルA

# echo foo > test.txt

ターミナルB

# tail -F test.txt
foo

ファイル名を変更します。tailしているターミナルに「~はアクセス不能になりました」という警告が表示されますが、そのままで問題ありません。

ターミナルA

# mv test.txt test_old.txt

ターミナルB

tail: `test.txt' はアクセス不能になりました: そのようなファイルやディレクトリはありません

再び元のファイル名に書き込むと、tailが再開します。

ターミナルA

# echo bar > test.txt

ターミナルB

# tail -F test.txt
bar

4.その他の方法

tailのバージョンによっては"-F"がサポートされていない場合がありますので、manコマンドでご確認ください。

"-F"がサポートされていない場合は、"--follow=name --retry"でも同様の動作になります。

# tail --follow=name --retry test.txt

"--follow=name"は、指定したファイル名に追従するオプションです。

"--retry"は、指定したファイルに対し何度もファイルオープンを試みるオプションです。

"--follow=name --retry"と"-F"は等価のようです。

なおこちらで動作を確認したところ、"--retry"は指定しなくても大丈夫かもしれません。

# tail --follow=name test.txt

色々ためしてみてください。

« 前の記事へ

次の記事へ »

トップページへ