我有一个程序,每次运行时都会生成一个新的日志文件。为了观察发生了什么,我想查看tail -f
日志 - 唯一的问题是我实际上事先不知道文件名。
那么,有没有办法跟踪所有与特定 (shell glob) 模式匹配的文件?我想我可以轻松编写类似这样的脚本,但我想知道是否已经有解决方案了。
答案1
tail
我认为如果不知道名称的话,没有直接的方法可以执行该操作- 如果您知道名称,那么tail --follow=name --retry
它将起作用并且会等待文件出现然后开始跟踪它。
我建议编写一个小 shell 脚本,用于inotifywait
监视文件的出现,然后开始tail -f
跟踪它。
答案2
如果您事先不知道文件名:
- 决定一个文件名,例如
foo.log
- 查看该文件:(
tail -F foo.log
不管 foo 是否存在) - 使用工具监视目录中的文件更改并运行命令
对于该命令,可以:
- 移动新文件以覆盖 foo.log
mv the_new_file_which_appeared foo.log
(如果应用程序日志打开一次,这将正常工作) - 或者只是符号链接:
ln -s the_new_file_which_appeared foo.log
- 并且尾部应该捕获它。
为了正确地监视目录(步骤 3),您需要一个可配置的、智能的工具。
实际上,Guard 并不比使用 shell 脚本(它是 Linux 上 inotify 之上的薄层)重很多,并且设置起来非常快速和容易。