如何在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工具集)监控目录,当有新的日志文件创建时,自动将其加入追踪列表。
先安装inotify-tools:
- Debian/Ubuntu:
sudo apt install inotify-tools - RHEL/CentOS:
sudo yum install inotify-tools
- Debian/Ubuntu:
创建并运行以下脚本:
#!/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是一个专门用于同时监控多个日志文件的工具,支持自动发现新增的匹配文件。
安装multitail:
- Debian/Ubuntu:
sudo apt install multitail - RHEL/CentOS:先启用EPEL仓库,再运行
sudo yum install multitail
- Debian/Ubuntu:
运行命令:
multitail -q /data/logs*.log
-q参数会让multitail定期检查匹配的文件模式,新增的logs3.log会被自动加入监控列表。
内容的提问来源于stack exchange,提问作者Pankaj
相关产品推荐
相关产品推荐

