我有一个格式为 的日志文件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