У меня есть сценарий оповещения, который я пытаюсь удержать от рассылки спама, поэтому я хотел бы поставить условие, что если оповещение было отправлено в течение, скажем, последнего часа, не отправлять другое оповещение. Теперь у меня есть задание cron, которое проверяет условие каждую минуту, потому что мне нужно быстро получать оповещения, когда условие выполняется, но мне не нужно получать электронное письмо каждую минуту, пока я не возьму проблему под контроль. Каков наилучший способ сравнить время в bash для этого?
Как лучше всего выполнить сравнение временных меток в Bash
Ответы (3)
Безусловно, проще всего хранить метки времени как время модификации фиктивных файлов. Команды GNU touch
и date
могут устанавливать/получать это время и выполнять вычисления даты. В Bash есть тесты для проверки того, является ли файл новее (-nt
) или старше (-ot
) другого.
Например, чтобы отправить уведомление, только если последнее уведомление было более часа назад:
touch -d '-1 hour' limit
if [ limit -nt last_notification ]; then
#send notification...
touch last_notification
fi
-nt
является расширением POSIX: pubs.opengroup.org/onlinepubs/009695399 /утилиты/test.html
- person Ciro Santilli 新疆再教育营六四事件ۍ 25.12.2018
Используйте «тест»:
if test file1 -nt file2; then
# file1 is newer than file2
fi
РЕДАКТИРОВАТЬ: Если вы хотите узнать, когда произошло событие, вы можете использовать «касание», чтобы создать файл, который вы позже сможете сравнить с помощью «теста».
Используйте команду даты, чтобы преобразовать два значения времени в стандартный формат и вычесть их. Вероятно, вы захотите сохранить предыдущее время выполнения в точечном файле, а затем сделать что-то вроде:
last = cat /tmp/.lastrun
curr = date '+%s'
diff = $(($curr - $last))
if [ $diff -gt 3600 ]; then
# ...
fi
echo "$curr" >/tmp/.lastrun
(Спасибо, Стив.)
$()
в вашем звонке на сегодняшний день.
- person harschware; 14.08.2014