我有一个软件,可以在重新启动时轮换其日志文件。然而,在开发过程中,我经常重新启动它,所以我想随时监控最新的日志文件。
如果我less
正常启动less program.log
并按Shift+f到尾部,则当日志文件轮换时,我将继续监视旧日志文件。我认为这是因为索引节点号保持不变并且less
有一个指向该索引节点的打开文件句柄。
是否可以监视当前调用的任何日志文件的最新活动program.log
?
具体来说,我正在开发 Sun 操作系统,因此适用于 Sun 操作系统的解决方案将是理想的选择。
答案1
less --follow-name
如果您的版本less
支持,请使用它。
该选项是在版本 416 中引入的。
Shift+F然后在 内执行正常的跟随命令less
。
答案2
该less
选项--follow-name
只是解决方案的一部分;
要替换tail -F
,需要另一个参数:
less --follow-name +F file.log
单独的选项less --follow-name file.log
实际上并不会在文件更新后开始。您需要按 进入跟随模式ShiftF。
(退出导航模式ControlC。)
而不是遵循文件,--follow-name
改变行为的更少。它使 follow内部的
命令键基于文件名,而不是文件描述符。 ShiftFless
此外,没有以less
跟随模式启动的正常选项。
但你可以使用命令行给出执行的按键启动后,通过在它们前面加上前缀+
.
将修饰符选项与 , 结合使用+F
,less
实际上会以(修改后的)跟随模式启动。
单独使用+F
相当于 plain tail -f
:
less +F file.log
答案3
我刚刚在 U&L Q&A 中找到了答案,标题为:如何进行tail -f
日志轮换文件?。
使用tail
:
(如果可以选择在您的系统上安装 GNU tail)
tail -F program.log
来自尾部手册页:
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f,
--follow, and --follow=descriptor are equivalent
-F same as --follow=name --retry
--retry keep trying to open a file even when it is or becomes
inaccessible; useful when following by name, i.e., with
--follow=name
关键是--retry
开关。这告诉tail
命令继续重试按名称跟踪文件。该-F
开关同时执行 a-f
和 a操作--retry
。
使用less
正如@StephaneChazela 在评论中指出的那样,以下内容将不起作用。
tail -F program.log | less
您唯一的其他选择是直接使用 less ,假设它直接支持--follow-name
开关和less
文件,tail
完全放弃使用。
less --follow-name program.log