Мне нужно проверить текущее время и прервать сценарий, если это не подходящее время суток, когда я должен его запустить. Кроме того, если кто-то еще запускает его, он должен прерваться.
Например: мне нужно, чтобы мой скрипт запускался только в том случае, если он запущен между 22:00 и 2:00 (4-часовое окно).
В настоящее время я делаю следующее. Не торопитесь date +%k%M
и сравнивайте с жестко закодированными числами
#!/bin/sh
currTime=`date +%k%M`
check_time_to_run()
{
tempTime=$1
if [ $tempTime -gt 200 -a $tempTime -lt 2200 ]; then
echo "Time is between 2 AM and 10 PM. Aborting."
exit 1
else
echo "Time is after 10 PM and before 2 AM. Running normally."
fi
}
check_time_to_run $currentTime
Я хотел бы знать, есть ли другой эффективный метод в отношении сравнения времени в sh
или bash
?
date +%s
.currTime=$(date +%s); lower=$(date +%s --date="2:00"); upper=$(date +%s --date="22:00"); if [$currTime -gt $lower -a $currTime -lt $upper]; then
…faketime
, ваш сценарий не очень безопасен. Использование файлов блокировки, вероятно, является лучшим вариантом.Ответы:
Это выглядит идеально для меня. Что заставляет вас думать, что это должно быть улучшено?
В любом случае, способы улучшить это могут быть:
zsh
илиksh93
gawk
(который меньше, чем bash, но не dash, но может избежать лишней вилки):Пример:
источник
Если внешние инструменты разрешены, вы можете проверить
dateutils
.Ваш "сценарий" становится:
Отказ от ответственности: я являюсь автором указанного инструмента.
источник