Подтвердить что ты не робот

Каков наилучший способ выполнения сопоставления времени в Bash

У меня есть предупреждение script, что я пытаюсь не спамить меня, поэтому я хотел бы поставить условие, что если в течение часа было отправлено предупреждение, чтобы не отправлять другое предупреждение. Теперь у меня есть задание cron, которое проверяет условие каждую минуту, потому что мне нужно быстро получать предупреждение, когда условие выполняется, но мне не нужно получать электронную почту каждый мунит, пока я не получу проблему под контролем. Каков наилучший способ сравнить время в bash, чтобы выполнить это?

4b9b3361

Ответ 1

Самым простым является сохранение временных меток в качестве времени модификации файлов-заглушек. Команды GNU touch и date могут устанавливать/получать эти времена и выполнять вычисления даты. Bash имеет тесты для проверки того, является ли файл более новым (-nt) или старше (-ot) другим.

Например, только для отправки уведомления, если последнее уведомление было более часа назад:

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

Ответ 2

Используйте "test":

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

EDIT: если вы хотите узнать, когда произошло событие, вы можете использовать "touch" для создания файла, который позже вы можете сравнить с помощью "теста".

Ответ 3

Используйте команду date, чтобы преобразовать два раза в стандартный формат и вычесть их. Вероятно, вы захотите сохранить предыдущее время выполнения в точечном файле, а затем выполните следующее:

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

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

echo "$curr" >/tmp/.lastrun

(Спасибо, Стив.)