Agende convenientemente um comando para executar mais tarde?

74

Qual é uma maneira simples de executar um comando, digamos, daqui a 8 horas? Eu posso pensar desta maneira:

nohup bash -c "sleep 28800 ; ./mycommand.sh" &

Existe uma maneira mais "correta"?

    
por Steve Bennett 30.08.2013 / 13:25

4 respostas

107

Você pode usar o comando at . Os comandos at execute em um momento posterior. O utilitário at deve ler os comandos da entrada padrão e agrupá-los como um trabalho, para ser executado posteriormente.

Normalmente, at é instalado por padrão no Ubuntu, mas se a sua versão não incluir, instale via:

sudo apt-get install at

Para mais informações, opções, exemplos e outros, veja o Repositório do Manpage do Ubuntu

Exemplo:

at now +8 hours -f ~/myscript.sh

Você também pode usar atalhos convenientes, como tomorrow ou noon , como em

echo "tweet fore" | at teatime 

Aviso: Isso executará o comando à esquerda do canal imediatamente , mas só apresentará sua saída mais tarde. O exemplo também demonstra como você pode enviar ações para at . at -c é a maneira como você pode examinar as ações agendadas, que você pode listar convenientemente com o número delas, como em:

at -c 3
    
por Mitch 30.08.2013 / 13:39
9

Sim, você pode definir um cron job.

Por exemplo, se agora for 14:39:00 e hoje for sexta-feira, 30 de agosto, você poderá adicionar a seguinte tarefa cron (a ser executada após 8 horas) no seu arquivo crontab usando crontab -e command:

39 22 30 8 5  /path/to/mycommand.sh

Mais sobre:

por Radu Rădeanu 30.08.2013 / 13:34
7

Use a GUI baseada no Gnome para cron , at e semelhantes:

A introdução do CronHowto sugere o uso do gnome-schedule gui, que é muito melhor do que digitar todo o lixo em o terminal (especialmente para usuários "médios" do Ubuntu que não são usuários "power" * nix / bsd.)

Execute-o usando o Unity Dash (ou outro menu de aplicativos) para procurar Tarefas agendadas ou executando gnome-schedule .

% bl0ck_qu0te%

Usando gnome-schedule , para um script em seu diretório pessoal, um novo comando "at" seria configurado usando esse tipo de janela:

    
por user29020 16.07.2014 / 21:20
3

Eu descobri uma maneira rápida e suja de fazer isso antes de descobrir que at era uma coisa.

Digamos que você queira que seu script seja executado ao meio-dia:

until [[ "$(date)" =~ "12:00:" ]]; do
    sleep 10
done
./mycommand.sh

Digamos que você queira que ele seja executado amanhã ao meio-dia (hoje é 24 de novembro para mim):

until [[ "$(date)" =~ "25 12:00:" ]]; do 
    sleep 30
done
./mycommand.sh
    
por wjandrea 24.11.2015 / 07:07