У меня есть предупреждение script, что я пытаюсь не спамить меня, поэтому я хотел бы поставить условие, что если в течение часа было отправлено предупреждение, чтобы не отправлять другое предупреждение. Теперь у меня есть задание cron, которое проверяет условие каждую минуту, потому что мне нужно быстро получать предупреждение, когда условие выполняется, но мне не нужно получать электронную почту каждый мунит, пока я не получу проблему под контролем. Каков наилучший способ сравнить время в bash, чтобы выполнить это?
Каков наилучший способ выполнения сопоставления времени в Bash
Ответ 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
(Спасибо, Стив.)