Сон до определенного времени/даты

Я хочу, чтобы мой сценарий удара спал до определенного времени. Так, я хочу команду как "сон", который не берет интервала, но время окончания и сны до тех пор.

"В" - демон не является решением, поскольку я должен заблокировать под управлением сценарий до определенной даты/времени.

Есть ли такая команда?

74
задан codeforester 28 October 2019 в 05:37
поделиться

0 ответов

Как упомянуто Программистом Преступника, я думаю, что решение состоит в том, чтобы только спать для корректного числа секунд.

, Чтобы сделать это в ударе, сделайте следующее:

current_epoch=$(date +%s)
target_epoch=$(date -d '01/01/2010 12:00' +%s)

sleep_seconds=$(( $target_epoch - $current_epoch ))

sleep $sleep_seconds

Для добавления точности вниз к наносекундам (эффективно больше вокруг миллисекунд) использование, например, этот синтаксис:

current_epoch=$(date +%s.%N)
target_epoch=$(date -d "20:25:00.12345" +%s.%N)

sleep_seconds=$(echo "$target_epoch - $current_epoch"|bc)

sleep $sleep_seconds

Примечание, что macOS / OS X не поддерживает точность ниже секунд, необходимо было бы использовать coreutils от brew вместо этого → см. эти инструкции

84
ответ дан Community 24 November 2019 в 11:56
поделиться

Вы могли, возможно, использовать 'в' отправить сигнал в Ваш сценарий, который находился, ожидая того сигнала.

1
ответ дан Kim Reece 24 November 2019 в 11:56
поделиться

Можно вычислить число секунд между теперь и время пробуждения и использовать существующую команду 'сна'.

1
ответ дан Outlaw Programmer 24 November 2019 в 11:56
поделиться

Можно мешать процессу выполниться, путем отправки ему сигнала SIGSTOP, и затем заставить его продолжать выполняться путем отправки ему сигнала SIGCONT.

, Таким образом, Вы могли остановить свой сценарий отправкой, SIGSTOP:

kill -SIGSTOP <pid>

И затем используют в deamon для пробуждения его путем отправки ему SIGCONT таким же образом.

, По-видимому, Ваш сценарий сообщит в того, когда он хотел быть разбуженным прежде, чем поместить себя для сна.

8
ответ дан SpoonMeiser 24 November 2019 в 11:56
поделиться

Используйте sleep, но вычислите время с помощью date. Вы захотите использовать date -d для этого. Например, скажем, Вы хотели ожидать до следующей недели:

expr `date -d "next week" +%s` - `date -d "now" +%s`

Просто замена "следующая неделя" с любой датой Вы хотели бы ожидать, затем присвоили бы это выражение значению и сон для этого много секунд:

startTime=$(date +%s)
endTime=$(date -d "next week" +%s)
timeToWait=$(($endTime- $startTime))
sleep $timeToWait

Все сделанные!

19
ответ дан Steve Schnepp 24 November 2019 в 11:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: