我有一个警报脚本,我试图避免向我发送垃圾邮件,所以我想提出一个条件,如果已发送警报,比如说最后一小时,则不发送另一个警报。现在我有一个cron工作,每分钟检查一次条件,因为我需要在满足条件时快速收到警报但我不需要每个munite都收到电子邮件,直到我控制住了问题为止。比较bash中的时间来实现这个目标的最佳方法是什么?

有帮助吗?

解决方案

到目前为止,最简单的方法是将时间戳存储为虚拟文件的修改时间。 GNU touch date 命令可以设置/获取这些时间并执行日期计算。 Bash有测试来检查文件是否比( -nt )更新或者比( -ot )更新文件。

例如,要仅在上次通知超过一小时前发送通知:

touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
    #send notification...
    touch last_notification
fi

其他提示

使用“test”:

if test file1 -nt file2; then
   # file1 is newer than file2
fi

编辑:如果您想知道事件发生的时间,可以使用“触摸”按钮。创建一个文件,稍后您可以使用“test”进行比较。

使用date命令将两次转换为标准格式,然后减去它们。您可能希望将先前的执行时间存储在点文件中,然后执行以下操作:

last = cat /tmp/.lastrun
curr = date '+%s'

diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
    # ...
fi

echo "$curr" >/tmp/.lastrun

(谢谢,史蒂夫。)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top