Linux ip-10-10-64-122 4.1.7-15.23.amzn1.x86_64 #1 SMP Mon Sep 14
23:20:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux
我tail -F
在一个 bash 脚本中使用,该脚本反过来循环结果。该脚本应该无限期运行
tail -F /tmp/my.log |
grep --line-buffered "xyz" |
while read i
do
echo "$i"
done
echo "end of read"
然而,虽然有时它通过 logrotate 工作,但有时它不会:
tail: '/tmp/my.log' has become inaccessible: No such file or directory
在这种情况下,我看不到“读取结束”意味着尾部/同时仍在运行/卡住。我可以确认日志文件确实在 logrotate 后在几毫秒内恢复到位,正如您所期望的那样。
日志旋转配置:
/tmp/mosquitto.log {
rotate 500
compress
maxsize 40M
nocreate
missingok
postrotate
/usr/bin/killall -HUP mosquitto
endscript
}
我怎样才能强迫它继续尾随?
正如我所怀疑的,您的日志轮换基本上会重命名当前日志文件,然后创建一个新文件。您需要使用
copytruncate
logrotate 选项,该选项保留原始日志文件及其所有属性。这将允许tail
正确地遵循它。tail
不能跟随一个不再存在的文件(copytruncate
不使用的情况)。