ローテーションされるファイルをtailする方法 †
tail -f ファイル名 でログなどを監視していると、ログのファイルサイズが規定のサイズになり、
自動的に別名にされ(ローテイト)され、tail -f では見れなくなってしまいます。
この代わりに-Fオプションを使うとこにより、ローテイトされても指定したファイルを関しすることができます。
以下に実際に動作確認を行った例を記します。
tail -F ファイル名を試してみる †
以下に tail -F を試した実行例を記します。
- ターミナルを2つ開きます。
tail -F コマンドを実行するターミナルをターミナル(A)、ファイル操作をするターミナルをターミナル(B)として記します。
- ターミナル(A)で以下のコマンドを実行します。
tail -F /tmp/test.log
以下、実行時の出力です。
$ tail -F /tmp/test.log
tail: `/tmp/test.log' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
警告メッセージが出力されますが、tailコマンドは実行されています。
ちなみに、-fオプションだと以下のようなエラーが出力されます。
$ tail -f /tmp/test.log
tail: `/tmp/test.log' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
tail: ファイルが全く残っていません
$
- ターミナル(B)から、/tmp/test.log ファイルに文字列を追記してみる。
以下のコマンドで/tmp/test.logに文字列を追記してみます。
$ date > /tmp/test.log
$ echo HELLO >> /tmp/test.log
- ターミナル(A)には、以下のメッセージが表示され、追記した文字列がターミナル(A)に表示されます。
tail: `/tmp/test.log' が現れました。新しいファイルの終端を追跡します
2016年 12月 8日 木曜日 19:02:42 JST
HELLO
- ターミナル(B)でファイルを削除する。
$ rm /tmp/test.log
- ターミナル(A)には以下のメッセージが表示されます。
tail: `/tmp/test.log' はアクセス不能になりました: そのようなファイルやディレクトリはありません
- 再度、ターミナル(A)で監視ファイルを作成し文字列を追記してみる。
$ echo SAKURA > /tmp/test.log
- ターミナル(A)に追記した文字列が表示されます。
SAKURA
尚、停止したい場合は、Ctrl+Cを押してください。
以上のようにwebサーバのログやDBのログなどを関ししているとき、自動的にローテイトされてしまうので、
tailの-Fオプションを使用することにより、ファイルが削除されたり、リネームされたりしても、
常に指定したファイルを監視することができます。