持续跟踪旋转日志文件,文件名中包含日期和时间

持续跟踪旋转日志文件,文件名中包含日期和时间

我有一个格式为 的日志文件log_name_YY-MM-DD_HH_mm.log。该日志每隔几个小时轮换一次,并创建新日志,其中包含其创建日期和时间。有时我需要使用该命令跟踪此日志的实时输出tail -f。日志轮换后,tail 仍指向旧文件名,必须使用新文件名手动重新启动。

有没有办法自动切换tail -f使用新文件?在这种情况下,tail -F选项 ( tail --follow=name --retry) 不起作用,因为日志的文件名会发生变化。

答案1

您可以创建一个脚本,在后台跟踪最新的日志文件,然后定期检查是否有新的日志文件。如果有新的日志文件,则终止旧进程并开始跟踪新文件。

就像是:

#!/bin/bash

PATTERN='log_name_??-??-??_??_??.log'

CURRENT=any_pattern # dummy pattern to start off first tail -f

while true; do
   NEWLOG=`ls -t $PATTERN|head -n1`
   if [[ $NEWLOG != $CURRENT ]]
   then
      kill $TAILPID 2>/dev/null
      CURRENT=$NEWLOG
      tail -f $CURRENT &
      TAILPID=$!
   fi
   sleep 1 # check regularly
done

相关内容