我使用一些每小时都会创建一个日志文件的日志系统,如下所示:
SoftwareLog.2010-08-01-08 SoftwareLog.2010-08-01-09 SoftwareLog.2010-08-01-10
我试图跟踪最新的日志文件提供的模式(例如SoftwareLog *),但我意识到:
tail -F (tail --follow=name --retry)
但这只能使用一个特定的名称-并且这些名称在日期和小时上具有不同的名称。我尝试了类似的东西:
tail --follow=name --retry SoftwareLog*(.om[1])
但是通配符语句在传递给尾部之前已被挽救,并且不会在每次重试尾部时重新执行。
有什么建议么?
[编辑:快速搜寻工具后]
你可能会想尝试multitail - http://www.vanheusden.com/multitail/
如果您想坚持Dennis Williamson的回答(我已经对他进行了+1),那么这里是您的空白。
在您的Shell中,运行以下脚本(或等效于zsh的脚本,在看到zsh标记之前,我先用bash编写了该脚本):
#!/bin/bash TARGET_DIR="some/logfiles/" SYMLINK_FILE="SoftwareLog.latest" SYMLINK_PATH="$TARGET_DIR/$SYMLINK_FILE" function getLastModifiedFile { echo $(ls -t "$TARGET_DIR" | grep -v "$SYMLINK_FILE" | head -1) } function getCurrentlySymlinkedFile { if [[ -h $SYMLINK_PATH ]] then echo $(ls -l $SYMLINK_PATH | awk '{print $NF}') else echo "" fi } symlinkedFile=$(getCurrentlySymlinkedFile) while true do sleep 10 lastModified=$(getLastModifiedFile) if [[ $symlinkedFile != $lastModified ]] then ln -nsf $lastModified $SYMLINK_PATH symlinkedFile=$lastModified fi done
使用普通方法(同样,我不知道zsh,所以可能有所不同)来后台处理该过程…
./updateSymlink.sh 2>&1 > /dev/null
然后tail -F $SYMLINK_PATH,使尾巴可以更改符号链接或旋转文件。
tail -F $SYMLINK_PATH
这有点令人费解,但是我不知道用尾巴做这件事的另一种方法。如果其他人知道可以处理此问题的实用程序,请让他们向前走,因为我也很想亲自查看它- 默认情况下,如Jetty之类的应用程序会以这种方式记录日志,并且我总是编写在cron上运行的符号链接脚本以补偿为了它。
[编辑:从其中一行的末尾删除了错误的’j’。您还存在一个错误的变量名称“ lastModifiedFile”,该名称不存在,您设置的正确名称是“ lastModified”]