Существует ли (полу) стандартная команда Unix, которая будет спать до времени, указанного в командной строке? Другими словами, я ищу что-то похожее, sleep
что потребовало бы времени пробуждения, а не продолжительности.
Например: sleeptill 05:00:00
Я могу что-то написать, но не буду изобретать велосипед, если что-то уже есть.
Бонусный вопрос: было бы здорово, если бы он занимал часовой пояс (как в sleeptill 05:00:00 America/New_York
).
edit Из-за характера того, что я делаю, я ищу решение «спать до T», а не «выполнить команду при T».
редактировать Во избежании сомнений, если я запускаю команду в 18:00 и сказать ему , чтобы проснуться в 17:00, я ожидал , чтобы спать в течение 23 часов (или, в некоторых случаях угловых , имеющих отношение к летнему времени, на 22 или 24 часа.)
cron
, я думаю.sleep
похоже.Ответы:
Если вы работаете в Unix с командой приличной даты и используете bash, вы можете использовать формат% s для расчета времени.
(1700 - это 5 вечера, а -j говорит, что не нужно устанавливать дату)
источник
-j
его,-d
чтобы он работал на моих системах Linux.]date -d 'tomorrow 17:00'
.echo $(( ($(date -d "3:00" +%s) - $(date +%s) + (60*60*24)) % (60*60*24) ))
(могут быть только некоторые проблемы с изменениями DST)Как насчет этого (объединение идей w00t и Gille в функцию)?
Применение:
источник
Проверьте / Linux Unix
at
команды . Используя пример 5 утра:at 05:00 some_command
Он также поддерживает часовые пояса:
источник
cron
илиat
, но это будет больно управлять. Вот почему я ищу что-то подобноеsleep
. На данный момент я написал свой собственный.