我有一个警报脚本,我试图阻止向我发送垃圾邮件,所以我想设置一个条件,如果警报已在过去一小时内发送,则不发送另一个警报。现在我有一个每分钟检查一次条件的 cron 作业,因为我需要在满足条件时快速收到警报,但在问题得到控制之前,我不需要每分钟都收到电子邮件。在 bash 中比较时间以完成此任务的最佳方法是什么?
Ichorus
问问题
48212 次
3 回答
67
到目前为止,最简单的方法是将时间戳存储为虚拟文件的修改时间。GNUtouch
和date
命令可以设置/获取这些时间并执行日期计算。Bash 有测试来检查一个文件是比 ( -nt
) 新还是比 ( -ot
) 另一个。
例如,仅在最后一个通知是一个多小时前才发送通知:
touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
#send notification...
touch last_notification
fi
于 2008-10-15T17:47:03.303 回答
21
使用“测试”:
if test file1 -nt file2; then
# file1 is newer than file2
fi
编辑:如果您想知道事件何时发生,您可以使用“触摸”创建一个文件,以后可以使用“测试”进行比较。
于 2008-10-15T17:38:46.190 回答
18
使用 date 命令将两次转换为标准格式,然后减去它们。您可能希望将以前的执行时间存储在 dotfile 中,然后执行以下操作:
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(谢谢,史蒂夫。)
于 2008-10-15T17:43:41.360 回答