代码之家  ›  专栏  ›  技术社区  ›  Ichorus

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

  •  37
  • Ichorus  · 技术社区  · 16 年前

    我有一个警报脚本,我正在努力阻止垃圾邮件,所以我想设置一个条件,如果警报已经发送,比如说最后一个小时内,不发送另一个警报。现在我有了一个cron任务,它每分钟检查一次情况,因为我需要在情况得到满足时迅速得到通知,但在问题得到控制之前,我不需要每次收到弹药的电子邮件。在bash中比较时间的最佳方法是什么?

    3 回复  |  直到 11 年前
        1
  •  61
  •   Bruno De Fraine    16 年前

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

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

    touch -d '-1 hour' limit
    if [ limit -nt last_notification ]; then
        #send notification...
        touch last_notification
    fi
    
        2
  •  19
  •   JesperE    16 年前

    使用“测试”:

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

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

        3
  •  14
  •   Veger    11 年前

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

    last = cat /tmp/.lastrun
    curr = date '+%s'
    
    diff = $(($curr - $last))
    if [ $diff -gt 3600 ]; then
        # ...
    fi
    
    echo "$curr" >/tmp/.lastrun
    

    (谢谢,史蒂夫。)