Como posso hibernar / suspender na linha de comando e fazê-lo em um horário específico

36

Eu consegui descobrir como suspender / hibernar o sistema na linha de comando, lendo Como posso suspender / hibernar na linha de comando? .

No entanto, gostaria de saber como usar a linha de comando para suspender / hibernar em um determinado momento, em termos absolutos (por exemplo, 23:00) ou relativos (por exemplo, em 30 minutos).

Eu já sei como fazer isso com o desligamento, mas tenho certeza de que o comando é semelhante.

Ederico
fonte

Respostas:

43

Você pode usar o atcomando para agendar qualquer ação, incluindo a execução dos comandos detalhados nessa pergunta .

Por exemplo, se você deseja hibernar em 30 minutos:

echo 'pmi action hibernate' | at now + 30 min

Ou se você deseja suspender às 23:00:

echo 'pmi action suspend' | at 11pm

Se você precisar executar um comando como root, execute atcom sudoe não o próprio comando com sudo(já sudoque só deve ser executado interativamente, a menos que você tenha configurado para não solicitar sua senha). Por exemplo, os equivalentes dos comandos acima usando pm-hibernatee pm-suspendsão:

echo pm-hibernate | sudo at now + 30 min

echo pm-suspend | sudo at 11pm

Eliah Kagan
fonte
Obrigado por entender que as duas situações foram solicitadas ... Eu editei o título para refletir isso também. Modifiquei minha resposta para incluir as duas situações agora.
cprofitt
Alguma idéia de como posso limpar os trabalhos?
KhoPhi 11/11
2
@Rexford O atrmcomando remove os trabalhos criados por at.
Eliah Kagan 27/12/16
9

Para especificação relativa (por exemplo, "após 30 minutos"), você pode simplesmente usar o sleepcomando para aguardar o comando de suspensão / hibernação.


Exemplos:

Aguarde 30 minutos e depois suspenda:

sudo sleep 30m; sudo pm-suspend

Aguarde 1 hora e depois hiberne:

sudo sleep 1h; sudo pm-hibernate
Eenoku
fonte
Eu também gosto dessa abordagem.
KhoPhi # 11/16
2
Após 1h, pm-hibernatequero uma senha para root novamente e a suspensão não acontece.
Vitaly Zdanevich 5/17
que tal fazer login como root para evitar ser solicitada uma senha?
banan3'14
4

Por períodos específicos repetidos - como desligar computadores são um horário específico todos os dias. use cron.

crontab -e

adicione o seguinte:

15 14 1 * * pmi action suspend

Se você deseja personalizá-lo.

* * * * * command to be executed
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Por um trabalho único, use o comando at

Por exemplo, se você deseja hibernar em 30 minutos:

echo 'pmi action hibernate' | at now + 30 min

Ou se você deseja suspender às 23:00:

echo 'pmi action suspend' | at 11pm
cprofitt
fonte
2
Usar croné uma boa solução quando o objetivo é suspender ou hibernar em um horário específico do dia ou em um horário específico em um dia específico da semana, mês ou ano. Mas para agendar uma única suspensão ou hibernação, que parece ser o que Ederico estava perguntando (e que é algo que faz muito mais sentido querer fazer), o atcomando deve ser usado. (Você pode programar um único evento com cron, fazendo a edição do evento do crontab relevante, por exemplo, usando sedou awk, mas que é extremamente complexo e desnecessário; uso at.)
Elias Kagan
Não se encaixa nos termos relativos solicitados pela pergunta, é útil apenas para agendamentos específicos.
Bruno Pereira
Sim, este foi um exemplo para o 'horário específico' solicitado. "No entanto, eu gostaria de saber como usar a linha de comando para suspender / hibernar em um determinado momento, em absoluto (por exemplo, 23:00)"
cprofitt
1
Você editou sua resposta para adicionar informações sobre como usar at, mas infelizmente as informações que você adicionou não estão corretas. O <operador redireciona o texto do arquivo ou dispositivo especificado à sua direita para a entrada padrão do comando especificado à sua esquerda. Se você quisesse usar em <vez de |(como na minha resposta ), teria que criar um arquivo com pmi action suspend(ou pmi action hibernate) como seu conteúdo. Essa complexidade |melhora aqui.
Elias Kagan
Como orientação geral, quando você tem um catcomando à esquerda de um |(por exemplo cat foo | bar), pode substituí-lo por uma <expressão ( bar < foo). Mas quando você tem um echocomando à esquerda de a |, isso não pode ser substituído trivialmente por uma <expressão.
Elias Kagan