
Eu sei que você pode agendar um desligamento para um horário específico shutdown -h 21:45
e que não deve usar crontabs para essas coisas devido à sua natureza repetitiva. Como posso agendar um desligamento para um determinadodatatipo 31 de agosto às 20h?
Responder1
O at
comando serve para agendar execuções futuras únicas.
por exemplo
% at 8pm Aug 31
at> echo hello
at> <EOT>
job 161 at Sat Aug 31 20:00:00 2019
(o "<EOT>" foi produzido pressionando control-D)
% atq
161 Sat Aug 31 20:00:00 2019 a sweh
Você pode colocar seu shutdown
comando aqui.
Responder2
Embora at
seja a maneira óbvia de fazer isso, acho que sobreviverá aos desligamentos; portanto, se a máquina for reinicializada antes do desligamento programado, ela poderá desligar novamente no horário programado. Portanto, usando bash e GNU date podemos usar um desligamento atrasado.
/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))
NB: Isso tem precisão de apenas um minuto. Ele funciona convertendo o horário agendado, e agora em segundos desde a época do UNIX, calculando a diferença, convertendo em minutos e, em seguida, usando isso como o atraso para o desligamento. Não funcionará corretamente se o horário programado estiver no passado.
Responder3
Versões recentes do Ubuntu usam systemd e quando o agendador convencional atd
e associado at
para comandos únicos não está instalado ou não está em execuçãoum comando único pode ser agendado comsystemd-run
o que é um pouco mais fácil do que gerar manualmente umsystemd timer
:
systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
Responder4
Para executar o trabalho apenas este ano:
0 20 31 8 * test $(/bin/date +\%Y) = "2019" && /sbin/shutdown now
Para executar o trabalho todos os anos:
0 20 31 8 * /sbin/shutdown now