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
:
-
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
-
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
-
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 comandols
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:
-
Crie um novo crontab executando
crontab -e
. Isso abrirá uma janela do seu editor de texto favorito. -
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
-
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.