vyosで「tail -f」する時の注意点
毎度vyosを触っている市田です。
今回はvyosのコマンドに関する小ネタです。
いきなりまとめ
- vyosでは
tail -f
コマンドでログの追記内容が更新されない - 原因はvyosのバグ
- inotifyを無効にすることで想定の動きになる
バグの確認
Githubなどを確認するとバグであることが指摘されていて、tail -f
を使っている箇所が修正されているのを確認することができます。
実際に、Github上では下記のように修正されていました。(抜粋)
-tail -f /var/log/messages \ +tail ---disable-inotify -f /var/log/messages \
-run: tail --follow=name /var/log/messages +run: tail ---disable-inotify --follow=name /var/log/messages
- Add an option to disable inotify to fail -f commands. · vyos/vyatta-op@75ae9d5 · GitHub
- Bug 303 – tail is not working (tailing)
対応方法
上記の通り、---disable-inotify
オプションを利用すれば良いことが分かります。
これは、文字通り、inotifyを無効にするという意味で、実際にtailコマンドのソースを見ると、tailがinotifyを利用していることが分かります。
tailf -f
するには、下記のような方法になります。
例として/var/log/messages
を対象とします。
# tail ---disable-inotify -f /var/log/messages
下記も同じです。
# tail ---disable-inotify --follow=name /var/log/messages
もしくはvyosのコマンドとして次のコマンドでも同様の結果になります。(事前にconfigureで編集モードになっておきます。)
# run monitor log
tailコマンドのソースを確認
VyOSのVer1.1.7(Helium)は、Debian SqueezeなのでSqueezeのソースコードで確認してみました。 手順は下記の通りです。
Debianサーバは、EC2でDebianのインスタンスを作成しました。 作成できたら、tailコマンドのパッケージを確認するためにtailコマンドのパスを調べます。
# which tail /usr/bin/tail
次にtailコマンドのパスに対してパッケージを確認します。
下記のようにcoreutils
パッケージであることが分かります。
# dpkg --search /usr/bin/tail coreutils: /usr/bin/tail
次のコマンドでcoreutilsパッケージのソースをダウンロードします。
# apt-get source coreutils # ls -l -rw-r--r-- 1 root root 48759 Mar 14 2015 coreutils_8.23-4.diff.gz -rw-r--r-- 1 root root 1942 Mar 14 2015 coreutils_8.23-4.dsc -rw-r--r-- 1 root root 12582141 Sep 1 2014 coreutils_8.23.orig.tar.gz
ダウンロードできたらtar.gzファイルを解凍します。src
ディレクトリがあるので、その中にあるtailコマンドのソースコードを確認します。
# tar zxvf coreutils_8.23.orig.tar.gz # cd coreutils-8.23/ # cd src/ # less tail.c
これで、tail.c
の中を検索すれば、inotifyを利用していることが分かります。
最後に
個人的にはtail -f
コマンドをよく利用するのですが、今回をきっかけにless +F
コマンドを常用していくのもいいかもしれないなと感じました。
ちなみにDebian(Squeeze)のtail -f
コマンドは正常に動きます。
以上になります。