当前位置:  开发笔记 > 编程语言 > 正文

在Bash中执行时间戳比较的最佳方法是什么

如何解决《在Bash中执行时间戳比较的最佳方法是什么》经验,为你挑选了3个好方法。

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



1> Bruno De Fra..:

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

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

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


注意:我发现-nt不起作用,除非时间戳之间至少有1秒的差异.为了测试文件是否为"新",我将其与"触摸"的临时文件进行了比较.我在那里添加了一个"睡眠1"来解释这个问题.看起来这种比较实际上是最简单的方法,但如果您不喜欢我的睡眠建议,您可能需要根据您的需要进行更精确的日期/时间比较.

2> JesperE..:

使用"测试":

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

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



3> jonathan-sta..:

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

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

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

echo "$curr" >/tmp/.lastrun

(谢谢,史蒂夫.)


我认为你的电话到目前为止需要反手或`$()`.
推荐阅读
落单鸟人
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有