
Existe um comando Unix (semi) padrão que ficaria suspenso até o tempo especificado em sua linha de comando? Em outras palavras, estou procurando algo semelhante sleep
que levaria tempo de despertar em vez de duração.
Por exemplo:sleeptill 05:00:00
Posso codificar algo, mas prefiro não reinventar a roda se já houver algo por aí.
Pergunta bônus: seria ótimo se pudesse usar o fuso horário (como em sleeptill 05:00:00 America/New_York
).
editarDevido à natureza do que estou fazendo, estou procurando uma solução "dormir até T" em vez de "executar comando em T".
editarPara evitar dúvidas, se eu executar o comando às 18h e disser para ele acordar às 17h, espero que ele durma por 23 horas (ou, em alguns casos relacionados ao horário de verão, por 22 ou 24 horas.)
Responder1
Se você estiver em um Unix que tenha um comando de data decente e use o bash, poderá usar o %s
formato para calcular o tempo.
sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
1700
sendo 17h.-j
dizendo a data para não definir a data.
Responder2
Que tal isso (combinar as ideias de w00t e Gille em uma função)?
function sleep_until {
seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
echo "Sleeping for $seconds seconds"
sleep $seconds
}
Uso:
sleep_until 8:24
Sleeping for 35 seconds
sleep_until '23:00'
Sleeping for 52489 seconds
sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds
Responder3
Confira o linux/unixat
comando. Usando o exemplo das 5h:
at 05:00 some_command
Ele também oferece suporte a fusos horários:
Um nome de fuso horário GMT, UCT ou ZULU (sem distinção entre maiúsculas e minúsculas) pode seguir para especificar que a hora está no Tempo Universal Coordenado. Outros fusos horários podem ser especificados usando a variável de ambiente TZ.