desligamento em data específica

11

Eu sei que você pode agendar um desligamento por um horário específico shutdown -h 21:45e que não deve usar crontabs para essas coisas devido à sua natureza repetitiva. Como posso programar um desligamento para uma data específica, como 31 de agosto às 20:00?

Upload HdM
fonte

Respostas:

7

Versões recentes do Ubuntu usam systemd e quando o agendador convencional atde associado atpara comandos pontuais não está instalado ou não está executando um comando pontual, pode ser agendado com osystemd-run que é um pouco mais fácil do que gerar manualmente um systemd timer:

 systemd-run --on-calendar="2019-08-31 20:00:00 CET" /sbin/shutdown now
HBruijn
fonte
2
A ironia é que iniciar um serviço inteiro para fazer isso é quase supérfluo. O próprio mecanismo de desligamento do systemd suporta pontos arbitrários no tempo. Sua ferramenta de linha de comando simplesmente não fornece a capacidade de acessar isso, porque não está à altura da linha de comando do BSD shutdown. Como escrevi em outra resposta, você que quer isso pode tentar convencer o pessoal do sistema a tornar sua shutdownferramenta mais capaz, com a sintaxe de décadas em pé, em vez de andar pelas casas com ele systemd-run.
JdeBP 28/05/19
Recebo uma especificação de calendário inválida: 2019-08-31 20:00:00 CET
HdM Upload
12

O atcomando é para agendar uma execução futura.

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 shutdowncomando aqui.

Stephen Harris
fonte
Sim! Eu tinha esquecido atquando publiquei - atdefinitivamente é para isso em geral, embora em uma empresa o método aceito possa ser atou cron, dependendo das convenções relacionadas ao gerenciamento / implantação da configuração.
flow2k 27/05/19
Não é exatamente equivalente, note. unix.stackexchange.com/q/465322/5132
JdeBP
attambém é capaz de receber comandos a partir de um tubo: echo "echo yup > $(tty)" | at now.
mosvy 27/05/19
7

Embora atseja a maneira óbvia de fazer isso, acho que ela sobreviverá a desligamentos; portanto, se a máquina reiniciar antes do desligamento programado, poderá desligar novamente no horário agendado. Portanto, usando data bash e GNU, podemos usar um desligamento atrasado.

/sbin/shutdown +$(( ( $( date -d "30 may 2019 13:15" +%s ) - $( date +%s ) ) / 60 + 1 ))

NB: Isso é preciso apenas para um minuto. Ele funciona convertendo o horário agendado e agora para segundos desde a época do UNIX, calculando a diferença, convertendo em minutos e, em seguida, usando isso como o atraso no desligamento. Não funcionará corretamente se o horário agendado estiver no passado.

CSM
fonte
3

Você usa um shutdowncomando melhor .

Os shutdowncomandos van Smoorenburg, Upstart e systemd não permitem uma especificação de data. Mas o shutdowncomando BSD assume um valor de data na especificação de quando desligar, no formulário yymmddhhmm. Este tem sido o caso desde o 4BSD, e permanece assim com o FreeBSD e o OpenBSD. O NetBSD estendeu para ccyymmddhhmm.

Como o conjunto de ferramentas nosh também é utilizável nos BSDs, dei ao meu shutdowncomando a mesma capacidade, estendendo-a para o CCYYMMDDHHMMNetBSD. E como o conjunto de ferramentas nosh também é utilizável no Linux, isso fornece ao Linux um comando de desligamento que leva datas.

É claro que funciona com o nariz system-manager. Também funciona com alguns outros sistemas. Ele envia sinais para o processo nº 1 para aprovar coisas e os mesmos sinais são entendidos por alguns outros gerentes de sistema, como systemd, que também podem ser desativados usando-o.

Você pode usá-lo ou uma ferramenta como essa; ou você pode tentar convencer os autores de outros shutdownprogramas Linux a estender suas ferramentas para também serem tão capazes quanto o BSD shutdown.

Leitura adicional

  • Jonathan de Boyne Pollard (2018). shutdown. páginas de manual do conjunto de ferramentas nosh. Programas.
  • Jonathan de Boyne Pollard (2018). system-manager. páginas de manual do conjunto de ferramentas nosh. Programas.
  • shutdown. Manual do Gerente do Sistema . Páginas do Manual do NetBSD. 04/11/2011.
  • shutdown. Manual de Gerenciamento de Sistemas FreeBSD . 01-01-2018.
  • shutdown. Páginas do Manual do OpenBSD. 21/01/2015.
  • /unix//a/465337/5132
JdeBP
fonte
1

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
Freddy
fonte
-4

Pode haver uma opção para inserir o ano no shutdowncomando, mas o cron pode ser usado para executar comandos apenas uma vez em um momento específico. Para o seu exemplo, tente

0 0 31 8 ? 2019  shutdown

Cuidado: o acima não é uma sintaxe cron padrão.

flow2k
fonte
2
1. Isso não diz 20:00 da tarde, mas meia-noite. 2. Eu nunca vi um cronjob com SEIS campos para o tempo. Qual implementação de cron você está fazendo referência?
Curinga
2
Não há um yearcampo no crontabhorário
Seamus
Percebi depois que essa sintaxe não é "cron padrão", então concordo que não deve ser tomada pelo valor de face. O OP parece sugerir que há uma penalidade de desempenho associada ao uso do cron; portanto, na minha resposta, procurei esclarecer - não há inerentemente ineficiente na implementação do cron que torne inadequado a tarefa pontual. É isso que você pensa também?
flow2k