What is the Best Way to Perform Timestamp Comparison in Bash


Question

I have an alert script that I am trying to keep from spamming me so I'd like to place a condition that if an alert has been sent within, say the last hour, to not send another alert. Now I have a cron job that checks the condition every minute because I need to be alerted quickly when the condition is met but I don't need to get the email every munite until I get the issue under control. What is the best way to compare time in bash to accomplish this?

1
37
10/15/2008 5:36:04 PM

Accepted Answer

By far the easiest is to store time stamps as modification times of dummy files. GNU touch and date commands can set/get these times and perform date calculations. Bash has tests to check whether a file is newer than (-nt) or older than (-ot) another.

For example, to only send a notification if the last notification was more than an hour ago:

touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
    #send notification...
    touch last_notification
fi
62
10/15/2008 5:47:03 PM

Use "test":

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

EDIT: If you want to know when an event occurred, you can use "touch" to create a file which you can later compare using "test".


Licensed under: CC-BY-SA with attribution
Not affiliated with: Stack Overflow
Icon