ログ監視などファイルをtailコマンドとオプション-fを使用してファイルの追記内容を確認したりすることがありますよね。
この記事は、ファイルが存在する前にtailコマンドで監視したり、監視しているファイルが削除またはリネームにより
監視ファイルが一時的に削除されても監視する方法を以下に記します。
通常、存在するファイルをtailコマンドで追記内容を端末に表示するには-fをオプションを使用します。
tail -f <監視ファイル>
今回は、まだ存在しないファイルまたは、監視中に削除またはリネームされ再度新規作成される場合を想定しています。
このような場合は、-Fオプションを使用します。
tail -F <監視ファイル>
tailコマンドの-fと-Fオプションを使ってみた結果を以下に記します。 tail -f <ファイル名> では、以下のようにファイルが存在しない場合はメッセージが出力され終了してしまいます。
sakura@ubuntu:~$ tail -f foo.log tail: `foo.log' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
tail -F <ファイル名> で実行すると、以下のようなメッセージが表示されますが、tailコマンドは終了せず、指定したファイルを監視します。
sakura@ubuntu:~$ tail -F foo.log tail: `foo.log' を 読み込み用に開くことが出来ません: そのようなファイルやディレクトリはありません
実際に別端末を開き、以下のようなコマンドで監視ファイルにログを追記してみます。
sakura@ubuntu:~$ echo `date` : hello >> foo.log sakura@ubuntu:~$ echo `date` : hello >> foo.log
tail -Fコマンドを実行している端末には以下のように出力されます。
tail: `foo.log' はアクセス可能になりました 2013年 9月 4日 水曜日 23:13:45 JST : hello 2013年 9月 4日 水曜日 23:13:46 JST : hello
監視しているファイル名をmvコマンドで変更すると、以下のメッセージが表示されますがtailコマンドは終了しません。
tail: `foo.log' はアクセス不能になりました: そのようなファイルやディレクトリはありません
再度、以下のようなコマンドで監視ファイルにログを追記してみます。
sakura@ubuntu:~$ echo `date` : world >> foo.log sakura@ubuntu:~$ echo `date` : world >> foo.log
tail -Fコマンドを実行している端末には以下のように出力されます。
tail: `foo.log' が現れました。新しいファイルの終端を追跡します 2013年 9月 4日 水曜日 23:16:46 JST : world 2013年 9月 4日 水曜日 23:16:47 JST : world
従って、ログファイル等を監視する場合は-Fオプションを使用することにより、ファイルの有無を気にせずに関しすることができます。
尚、-Fオプションの意味は以下の通りです。(man tail抜粋)
TAIL(1) User Commands TAIL(1) NAME tail - output the last part of files SYNOPSIS tail [OPTION]... [FILE]... <snip> -f, --follow[={name|descriptor}] output appended data as the file grows; -f, --follow, and --follow=descriptor are equivalent -F same as --follow=name --retry <snip> --retry keep trying to open a file even when it is or becomes inaccessible; useful when following by name, i.e., with --follow=name
以上、ファイルが存在しない場合のtailによる監視方法でした。