O que é uma maneira simples de executar um comando, digamos, daqui a oito horas? Eu posso pensar assim:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Existe uma maneira mais "adequada"?
O que é uma maneira simples de executar um comando, digamos, daqui a oito horas? Eu posso pensar assim:
nohup bash -c "sleep 28800 ; ./mycommand.sh" &
Existe uma maneira mais "adequada"?
Respostas:
Você pode usar o at
comando Os at
comandos de execução posteriormente. O at
utilitário deve ler os comandos da entrada padrão e agrupá-los como um trabalho, para serem executados posteriormente.
Normalmente, at
é instalado por padrão no Ubuntu, mas se o seu lançamento não o incluir, instale via:
sudo apt-get install at
Para mais informações, opções, exemplos e outros, consulte o repositório de páginas Manuais 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 tubo imediatamente, mas somente apresentará sua saída posteriormente. O exemplo também demonstra como você pode canalizar açõesat
. at -c
é a maneira de examinar as ações agendadas, que você pode listar convenientemente com o número delas, como em:
at -c 3
at now +8 hours -f ~/myscript.sh
at 8:00
para executar o comando em um tempo absoluto, e batch
para "quando parece que o computador está ocioso"
teatime
é às 16h. Por algumas razões, não é mencionado em manpages.ubuntu.com/manpages/raring/man1/at.1posix.html, mas está man at
aqui e aqui em manpages.ubuntu.com/manpages/raring/en/man1/at.1.html .
gpio write 8 1
mas ele foi executado imediatamente.
Sim, você pode definir um trabalho cron.
Por exemplo, se agora é 14:39:00 e hoje é sexta-feira, 30 de agosto, você pode adicionar o seguinte trabalho cron (a ser executado após 8 horas) no seu arquivo crontab usando o crontab -e
comando:
39 22 30 8 5 /path/to/mycommand.sh
Mais sobre:
crontab
até que você o remova. Um ano depois, quando você esquecer quem colocou lá e por quê, ficará coçando a cabeça, imaginando o que fazer com o comando.
Utilizar a GUI baseada em Gnome para cron
, at
e afins:
A introdução do CronHowto sugere o uso da gnome-schedule
GUI, que é muito mais agradável do que digitar todo o lixo no terminal (especialmente para usuários "médios" do Ubuntu que não são usuários "avançados" * nix / bsd).
Execute-o usando o Unity Dash (ou outro menu de aplicativos) para procurar tarefas agendadas ou em execução gnome-schedule
.
Nos sistemas Ubuntu baseados no Gnome, a ferramenta Tarefas agendadas do Gnome (do pacote gnome-schedule) em Aplicativos -> Ferramentas do sistema fornece uma interface gráfica com instruções para usar o Cron. O site do projeto está em http://gnome-schedule.sourceforge.net/ ; o software é instalável no Centro de Software ou digitando
sudo apt-get install gnome-schedule
em um terminal.
Usando gnome-schedule
, para um script em seu diretório pessoal, um novo comando "at" seria configurado usando este tipo de janela:
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 funcione amanhã ao meio-dia (hoje é 24 de novembro para mim):
until [[ "$(date)" =~ "25 12:00:" ]]; do
sleep 30
done
./mycommand.sh
Atualização : Método ligeiramente melhor: teste apenas os números de que você gosta, usando date +FORMAT
:
until [[ $(date +%H:%M) == 21:06 ]]; do
...
at
, cron
ou qualquer outra aplicação real programador. O agendamento de tarefas é difícil e não é uma roda que você deve reinventar.
at
.
at
é porque seus trabalhos sobreviverão a uma reinicialização.
nohup
+sleep
? Por que é "impróprio"?