本文目录导读:

在Shell脚本中实时跟踪日志新增内容,最经典和常用的方法是使用 tail -f 命令,这里为你整理了几种常见的实现方式及进阶技巧:
基础方法:tail -f
这是最直接的方式,会实时输出日志文件的新增内容:
tail -f /var/log/syslog
更高效的方式:tail -F
-F 比 -f 更强,它会追踪文件描述符,即使日志文件被轮转(rename/truncate)也能继续追踪:
tail -F /var/log/app.log
结合其他命令实时处理
带时间戳输出
tail -f app.log | while read line; do
echo "$(date '+%Y-%m-%d %H:%M:%S') $line"
done
实时过滤和告警
tail -f app.log | while read line; do
if echo "$line" | grep -q "ERROR"; then
echo "⚠️ 发现错误: $line"
# 可以发送邮件或通知
fi
done
使用 inotifywait(更高效)
对于需要精确控制或日志文件非常大的场景,使用 inotifywait 更高效:
#!/bin/bash
LOGFILE="/var/log/app.log"
# 先显示已有内容
tail -n 0 "$LOGFILE"
# 监控文件变化
inotifywait -m -e modify "$LOGFILE" | while read; do
tail -n 1 "$LOGFILE"
done
完整实时监控脚本示例
#!/bin/bash
LOG_FILE="$1"
KEYWORDS=("ERROR" "WARNING" "FATAL")
if [ -z "$LOG_FILE" ]; then
echo "用法: $0 <日志文件路径>"
exit 1
fi
echo "开始监控: $LOG_FILE"
echo "按 Ctrl+C 退出"
tail -F "$LOG_FILE" | while read line; do
timestamp=$(date '+%Y-%m-%d %H:%M:%S')
# 检查是否包含关键字
for keyword in "${KEYWORDS[@]}"; do
if echo "$line" | grep -qi "$keyword"; then
echo "[$timestamp] [${keyword}] $line"
break
fi
done
done
常用参数对比
| 参数 | 作用 | 适用场景 |
|---|---|---|
-f |
跟踪文件变化 | 基本日志跟踪 |
-F |
跟踪文件,支持轮转 | 生产环境日志 |
-n 10 |
显示最后10行后开始跟踪 | 只看新增内容 |
-q |
安静模式,减少输出 | 脚本中使用 |
注意事项
- 资源消耗:长时间运行
tail -f会占用一定资源 - 日志轮转:使用
-F而不是-f处理日志轮转 - 退出方式:按
Ctrl+C退出跟踪 - 管道阻塞:管道后的命令要能实时处理,避免缓冲区阻塞
高级用法:使用 less +F
如果你已经开始使用 less 查看日志,可以按 Shift+F 进入跟踪模式,相当于 tail -f:
less +F app.log # 直接进入跟踪模式 # 或者在 less 中按 F 键切换
选择哪种方式取决于你的具体需求:
- 简单查看:
tail -f - 生产环境:
tail -F - 需要处理内容:管道配合
while read - 需要监控文件系统事件:
inotifywait
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播