思路
获取文件修改时间,然后和当前时间比较,如果大于指定时间则发送邮件。
方法一
#!/bin/bash
# 获取当前时间的 Unix 时间戳
Current_Timestamp=`date +%s`
# 获取文件修改时间
File_Modified_Time=`stat test.log | grep "Modify" | cut -d"." -f1 | cut -d":" -f2-`
# 获取文件修改时间的 Unix 时间戳
File_Modified_Timestamp=`date -d "${File_Modified_Time}" +%s`
# 获取当前时间和文件修改时间的 Unix 时间戳时间差
Difftime=`expr ${Current_Timestamp} - ${File_Modified_Timestamp}`
# 如果时间差大于 300s,说明文件修改时间是在 5 分钟前,也就是最近 5 分钟文件没有更新,如果满足条件就触发以下的邮件发送动作
if [ $Difftime -gt 300 ]
then
echo "File not update in past 5 mins." | mail -s "File not update!" liangfh8006@gmail.com
fi
方法二
不像思路 1 那么直接,而是巧妙间接使用 find 命令来找出 5 分钟前没更新过的文件。 具体如下:
#!/bin/bash
# 使用 find 命令查找 5 分钟前文件更新的文件并且文件名是 test.log
File_Update_Flag=`cd /root && find -iname "test.log" -type f -mmin +5 | wc -l`
# 如果找到了这个文件,就就触发以下的邮件发送动作
if [ ${File_Update_Flag} -eq 1 ]
then
echo "File not update in past 5 mins." | mail -s "File not update!" liangfh8006@gmail.com
fi