![对新创建的未知名称的文件执行 tail -f](https://linux22.com/image/1336551/%E5%AF%B9%E6%96%B0%E5%88%9B%E5%BB%BA%E7%9A%84%E6%9C%AA%E7%9F%A5%E5%90%8D%E7%A7%B0%E7%9A%84%E6%96%87%E4%BB%B6%E6%89%A7%E8%A1%8C%20tail%20-f.png)
我有一个程序,每次运行时都会生成一个新的日志文件。为了观察发生了什么,我想查看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 之上的薄层)重很多,并且设置起来非常快速和容易。