このエントリーをはてなブックマークに追加


tailコマンドで新規作成や削除されるファイルの監視方法

ログ監視などファイルをtailコマンドとオプション-fを使用してファイルの追記内容を確認したりすることがありますよね。
この記事は、ファイルが存在する前にtailコマンドで監視したり、監視しているファイルが削除またはリネームにより
監視ファイルが一時的に削除されても監視する方法を以下に記します。


関連資料

-Fオプションにより存在しないファイルを監視する

通常、存在するファイルをtailコマンドで追記内容を端末に表示するには-fをオプションを使用します。

tail -f <監視ファイル>

今回は、まだ存在しないファイルまたは、監視中に削除またはリネームされ再度新規作成される場合を想定しています。
このような場合は、-Fオプションを使用します。

tail -F <監視ファイル>

実際に-fと-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による監視方法でした。



トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-03-20 (金) 22:28:04