You need to enable JavaScript to run this app. 如何用Bash检查文件近30分钟修改情况 实现时间逻辑并触发邮件通知
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash检查文件近30分钟修改情况 实现时间逻辑并触发邮件通知

Bash实现文件修改时间检查并触发邮件的方案

核心实现思路

把所有时间统一转换为*Unix纪元时间戳(自1970-01-01以来的秒数)*做数值比较,完全规避时区、格式位数不匹配、跨时间节点比较错误的问题,不需要手动裁剪时间字符串。

关键命令说明

  • 获取指定文件最后修改时间的纪元秒:stat -c %Y 目标文件路径,不需要调用%y取格式化字符串再处理,直接输出数值
  • 获取30分钟前的纪元秒:date -d "-30 minutes" +%s,date命令原生支持相对时间计算,自动处理时区、跨天/跨月等边界情况

完整脚本示例

#!/bin/bash
# 配置项:修改为你实际的文件路径和收件人地址
TARGET_FILE="/path/to/your/file.txt"
RECIPIENT="your-email@example.com"

# 先判断文件是否存在,不存在直接退出或按需求处理
if [ ! -f "$TARGET_FILE" ]; then
    echo "错误:目标文件不存在"
    exit 1
fi

# 获取两个时间戳
file_mtime=$(stat -c %Y "$TARGET_FILE")
thirty_min_ago=$(date -d "-30 minutes" +%s)

# 条件比较
if [ $file_mtime -gt $thirty_min_ago ]; then
    # 30分钟内有修改,直接终止
    exit 0
else
    # 30分钟内无修改,发送邮件
    echo "文件$TARGET_FILE已超过30分钟未更新" | mail -s "文件更新超时告警" "$RECIPIENT"
    exit 0
fi

cron配置示例

比如每30分钟执行一次的话,添加cron任务:

*/30 * * * * /path/to/your/script.sh

注意事项

  • 上述命令为GNU/Linux环境适配,若在macOS/BSD环境运行,获取文件修改时间的命令调整为stat -f %m "$TARGET_FILE"即可
  • 确保运行cron的用户对目标文件有读权限、对mail命令有调用权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 08:24:07