如何用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
相关产品推荐
相关产品推荐

