web-dev-qa-db-ja.com

ライブ実行中にsyslogを「tail -f」がたどらないのはなぜですか?

/var/log/syslogをリアルタイム(または数秒以内)での変更を監視したいのですが、tail -fは新しい変更で更新されません。

現在、UbuntuベースのLinux Mint 17 XFCEをライブで実行していますが、これはUbuntu、Xubuntu、またはLinux Mint Mateのライブisoでも動作していません。

私はこれらを試しました:

$ tail -f /var/log/syslog
$ tail -f --retry -s 1 /var/log/syslog
$ tail --follow=name /var/log/syslog
$ tail --follow=name --retry /var/log/syslog
$ tail --follow=name --retry -s 1 /var/log/syslog

ただし、最初はファイルの最後の数行のみを出力し、ファイルが大きくなったときは更新しません(たとえば、空のファイルをマウントしようとすると約15行のエラーが発生します)。

実際、ホームフォルダー内のテストファイルをたどろうとしても、tail -f testfileを実行してから(別のターミナルで)動作しないようです。
$ echo "new stuff" >> testfile
$ echo "new stuff2" >> testfile
$ echo "3" >> testfile
結果はtailにも更新されません...
しかし、/tmp(tmpfsにマウント)にtestfileを入れると、ファイルの後に続くdoes変更します。

なぜ後を追わないのですか?

ライブを実行するのに奇妙なことや、tail -fを損なうoverlayfsがありますか?そして、ログに従う方法の提案はありますか? (xwatchは問題なく動作しますが、何か良いことや端末で動作しますか?)


strace tail -f -s 1 testfileを実行しようとしましたが、write(1,testfileの既存の数行になった後、ここに出力の最後の数行があります。

write(1, "new1\n", 5new1
)                   = 5
fstat64(3, {st_mode=S_IFREG|0644, st_size=22, ...}) = 0
fstatfs64(3, 84, {f_type=0x1021994, f_bsize=4096, f_blocks=968776, f_bfree=461437, f_bavail=461437, f_files=203469, f_ffree=190635, f_fsid={0, 0}, f_namelen=255, f_frsize=4096, f_flags=1056}) = 0
inotify_init()                          = 4
inotify_add_watch(4, "testfile", IN_MODIFY|IN_ATTRIB|IN_DELETE_SELF|IN_MOVE_SELF) = 1
fstat64(3, {st_mode=S_IFREG|0644, st_size=22, ...}) = 0
read(4, 
4
Xen2050

tailinotifyを使用しますが、overlayfsでは機能しません。 このバグレポート および この説明 を参照してください。 @ Xen2050は---disable-inotifytailに切り替わることを指摘しました- この回避策 を参照してください

apt-srcを使用してcoreutilsソースをインストールし、-UHAVE_INOTIFYtailを再コンパイルできます。

3
waltinator