Como encerrar o Linux em um datetime específico do terminal?

38

Parece que posso encerrar usando sudo shutdown especificando uma hora ou minutos.

Existe uma maneira de especificar datetime para o desligamento?

    
por Askar 20.03.2014 / 02:12

3 respostas

66

Você pode fazer isso diretamente do shutdown command , consulte man shutdown :

SYNOPSIS
   /sbin/shutdown [-akrhPHfFnc] [-t sec] time [warning message]

[...]

   time   When to shutdown.

Então, por exemplo:

shutdown -h 21:45

Isso executará shutdown -h às 21:45.

Para comandos que não oferecem essa funcionalidade, você pode tentar um dos seguintes:

Usando a

O daemon at foi projetado exatamente para isso. Dependendo do seu sistema operacional, você pode precisar instalá-lo. Em sistemas baseados em Debian, isso pode ser feito com:

sudo apt-get install at

Existem três formas de fornecer um comando para at :

  1. Encaixe:

    $ echo "ls > a.txt" | at now + 1 min
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  2. Salve o comando que você deseja executar em um arquivo de texto e passe esse arquivo para at :

    $ echo "ls > a.txt" > cmd.txt
    $ at now + 1 min < cmd.txt
    warning: commands will be executed using /bin/sh
    job 3 at Thu Apr  4 20:16:00 2013
    
  3. Você também pode passar os comandos at do STDIN:

    $ at now + 1 min
    warning: commands will be executed using /bin/sh
    at> ls
    

    Em seguida, pressione Ctrl D para sair do shell at . O comando ls será executado em um minuto.

Você pode fornecer tempos muito precisos no formato [[CC]YY]MMDDhhmm[.ss] , como em

$ at -t 201403142134.12 < script.sh

Isso executará o script script.sh às 21:34 e 12 segundos no dia 14 de março de 2014.

B. Usando cron (embora isso não seja uma boa idéia para o desligamento)

A outra abordagem é usar o planejador cron , que é projetado para executar tarefas em horários específicos. Geralmente é usado para tarefas que serão repetidas, mas você também pode dar um tempo específico. Cada usuário tem seus próprios "crontabs", que controlam quais tarefas são executadas e quando. O formato geral de um crontab é:

*     *     *     *     *  command to be executed
-     -     -     -     -
|     |     |     |     |
|     |     |     |     +----- day of week (0 - 6) (Sunday=0)
|     |     |     +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)

Portanto, por exemplo, isso executará ls todos os dias às 14:04:

04 14 * * * ls

Para configurar um cronjob para uma data específica:

  1. Crie um novo crontab executando crontab -e . Isso abrirá uma janela do seu editor de texto favorito.

  2. Adicione esta linha ao arquivo que acabou de abrir. Este exemplo específico será executado às 14:34 de 15 de março de 2014, se esse dia for uma sexta-feira (portanto, OK, pode ser executado mais de uma vez):

    34 14 15 5  /path/to/command        
    
  3. Salve o arquivo e saia do editor.

Esta Resposta SO sugere uma maneira de tê-lo executado apenas uma vez, mas eu nunca usei, então não posso atestar isso.

    
por 20.03.2014 / 02:20
19

Não, você não pode especificar uma data no comando shutdown, mas existem duas alternativas:

O mais fácil é usar o comando at :

echo "shutdown -r now" | at 10am Jul 31

mas se você não se incomodar em usar a calculadora e desejar desligar em 24 horas (24 * 60 = 1440 minutos):

shutdown -r +1440
    
por 23.12.2014 / 12:12
7

Ele desligará seu sistema às 12:00:

$ sudo shutdown -h 12:00

Opções:

-h, -P, --poweroff

Desligue a máquina.

-r, --reboot

Reinicialize a máquina.

-c

Cancelar um encerramento pendente.

    
por 20.03.2014 / 11:46