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

请求编写Bash脚本:校验日志最后一行时间与当前时间差

没问题,我帮你写一个能满足需求的Bash脚本,还会把关键逻辑拆解开,方便你根据自己的日志格式调整:

Bash脚本:检查日志最后更新时间是否超时

#!/bin/bash

# 配置日志文件路径,根据实际情况修改
LOG_FILE="/path/to/your/logfile.log"

# 定义超时阈值(60分钟转成秒)
TIMEOUT_THRESHOLD=$((60 * 60))

# 检查日志文件是否存在
if [ ! -f "$LOG_FILE" ]; then
    echo "错误:日志文件 $LOG_FILE 不存在"
    exit 1
fi

# 获取日志最后一行
LAST_LINE=$(tail -n 1 "$LOG_FILE")
if [ -z "$LAST_LINE" ]; then
    echo "错误:日志文件为空"
    exit 1
fi

# 从最后一行提取日期时间(这里假设时间格式是YYYY-MM-DD HH:MM:SS,且是行内前两个字段)
# 请根据你的实际日志格式修改这一行!比如用cut/awk/sed提取对应部分
LOG_TIME=$(echo "$LAST_LINE" | awk '{print $1, $2}')

# 将日志时间转换为Unix时间戳(适用于GNU date,比如Linux系统)
# 如果是macOS,替换成:LOG_TIME_TS=$(date -j -f "%Y-%m-%d %H:%M:%S" "$LOG_TIME" +%s)
LOG_TIME_TS=$(date -d "$LOG_TIME" +%s)
if [ $? -ne 0 ]; then
    echo "错误:无法解析日志中的时间格式"
    exit 1
fi

# 获取当前时间的Unix时间戳
CURRENT_TIME=$(date +%s)

# 计算时间差(秒)
TIME_DIFF=$((CURRENT_TIME - LOG_TIME_TS))

# 判断是否超时
if [ "$TIME_DIFF" -gt "$TIMEOUT_THRESHOLD" ]; then
    echo "警告:日志最后更新时间已超过60分钟,进程可能异常"
    exit 1
else
    echo "日志最后更新时间正常,时间差为 $((TIME_DIFF / 60)) 分钟"
    exit 0
fi

关键部分说明

  • 日志路径配置:第一行的LOG_FILE要替换成你实际的日志文件路径
  • 时间提取逻辑:LOG_TIME=$(echo "$LAST_LINE" | awk '{print $1, $2}')是核心,你需要根据日志的实际格式调整。比如如果日志行是[2024-05-20 15:30:00] Process completed,可以改成LOG_TIME=$(echo "$LAST_LINE" | sed -E 's/\[(.*)\].*/\1/')来提取时间
  • 跨平台兼容:GNU date(Linux)和BSD date(macOS)的时间转换语法不同,脚本里已经标注了替换方式,根据你的系统调整即可
  • 错误处理:脚本加入了文件存在性、空文件、时间解析失败的判断,避免意外报错导致逻辑混乱

使用方法

  1. 把脚本保存为check_log_timeout.sh
  2. 赋予执行权限:chmod +x check_log_timeout.sh
  3. 直接运行:./check_log_timeout.sh,超时会返回错误码1,正常则返回0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:36:53