You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Bash中追踪符合正则的动态生成日志文件?

解决Bash中tail -f无法追踪动态生成文件的问题

方法1:使用tail -F(大写F)

这是最直接的解决方案,tail -F是tail --follow=name --retry的简写,它会持续检查匹配的文件名,不管文件是后续创建的还是被日志轮转工具替换的,都会自动开始追踪。

直接运行:

tail -F /data/logs*.log

当后续生成logs3.log时,这个命令会自动识别并开始追踪该文件。

方法2:用inotifywait编写监控脚本

如果需要更灵活的控制,可以借助inotifywait(来自inotify-tools工具集)监控目录,当有新的日志文件创建时,自动将其加入追踪列表。

  1. 先安装inotify-tools:

    • Debian/Ubuntu:sudo apt install inotify-tools
    • RHEL/CentOS:sudo yum install inotify-tools
  2. 创建并运行以下脚本:

#!/bin/bash
# 启动tail追踪已存在的日志文件
tail -f /data/logs*.log &
MAIN_TAIL_PID=$!

# 监控/data目录的文件创建事件
inotifywait -m -e create --format '%w%f' /data | while read NEW_FILE; do
  # 只处理匹配logs*.log的文件
  if [[ $NEW_FILE =~ /data/logs.*\.log$ ]]; then
    echo "开始追踪新文件:$NEW_FILE"
    tail -f "$NEW_FILE" &
  fi
done

# 捕获中断信号,清理tail进程
trap "kill $MAIN_TAIL_PID; pkill -P $$ tail; exit" INT TERM

给脚本加执行权限并运行:chmod +x track_logs.sh && ./track_logs.sh

方法3:使用multitail工具

multitail是一个专门用于同时监控多个日志文件的工具,支持自动发现新增的匹配文件。

  1. 安装multitail:

    • Debian/Ubuntu:sudo apt install multitail
    • RHEL/CentOS:先启用EPEL仓库,再运行sudo yum install multitail
  2. 运行命令:

multitail -q /data/logs*.log

-q参数会让multitail定期检查匹配的文件模式,新增的logs3.log会被自动加入监控列表。

内容的提问来源于stack exchange,提问作者Pankaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 11:15:45