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

Bash脚本实现wget定时下载日志检测变更及重置处理

Bash日志轮询监控脚本优化方案

你原有的实现思路基本成立,但完全不需要额外配置cron任务处理午夜日志清空的场景,直接在脚本内增加简单判断即可覆盖该场景,同时可以简化新增日志的提取逻辑,省去处理diff冗余格式的工作量。

核心优化点

  • 针对日志纯追加写入的特性,直接按行号截取新增内容,输出无多余格式标记,可直接用于告警格式化,比diff方案更高效
  • 每次下载新日志后自动比对新旧日志行数:如果新日志行数小于本地留存的旧基准日志行数,直接判定为远端日志清空/轮转,即时更新本地基准文件跳过告警,无需额外配置定时清理任务
  • 脚本内置循环和等待逻辑,后台常驻运行即可,无需依赖cron按5分钟间隔触发

完整实现代码

#!/bin/bash
LOG_URL="https://url-to-logs.org"
# 初始化基准日志文件,不存在则创建空文件
[ -f old_log ] || touch old_log

while true; do
    # 静默下载最新日志
    wget -q "$LOG_URL" -O new_log
    old_line_count=$(wc -l < old_log)
    new_line_count=$(wc -l < new_log)

    if [ "$new_line_count" -lt "$old_line_count" ]; then
        # 命中日志截断/清空场景,直接更新基准,不触发告警
        cp new_log old_log
        rm -f new_log
    elif diff -q new_log old_log >/dev/null; then
        # 无新增日志条目
        echo "no new log entries to send."
        rm -f new_log
    else
        echo "new log entries found, sending alert."
        # 直接截取纯新增行,无diff格式冗余
        tail -n +$((old_line_count + 1)) new_log > new_entries

        # 在此处编写告警逻辑,直接读取new_entries内容做格式化发送即可
        # 示例:mail -s "新增日志告警" 你的接收邮箱 < new_entries

        # 更新本地基准日志
        cp new_log old_log
        rm -f new_log new_entries
    fi

    # 等待5分钟进入下一轮
    sleep 300
done

注意事项

  • 脚本中wget增加了-q静默参数,不会输出下载进度等冗余信息,适合后台常驻运行
  • 删除临时文件用rm -f即可,无需使用rm -rf:处理普通文件不需要递归参数,避免变量异常时引发误删风险
  • 脚本内识别日志截断的逻辑兼容性远好于固定午夜cron清理的方案,哪怕日志清空时间有偏差、或者出现非计划内的日志重置,都能正常处理,不会触发误报
  • 可以搭配简单的进程守护或开机自启配置保证脚本持续运行,维护成本比多cron任务方案低很多

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:45:37