この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
毎度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
コマンドは正常に動きます。
以上になります。