Usando o "at" para agendamento de tarefas
Eu diria que o cron é ideal para agendamento de tarefas diárias e o at para agendamento de tarefas aleatórias. Neste artigo veremos como agendar tarefas com o at.
Introdução
Eu diria que o cron é ideal para agendamento de tarefas diárias e o at para agendamento de tarefas aleatórias.
Por exemplo, enquanto escrevo essa dica, tenho um frango assando no forno que ficará pronto daqui a 50 minutos. Como estou no PC, quero agendar um lembrete no meu Linux para quando o mesmo ficar pronto. Não faz muito sentido eu criar uma entrada no cron só para isso, pois ela ficará se repetindo ou então terei de retornar ao cron para remover a entrada.
Também não faz sentido eu executar o lembrete usando combinado com o comando "sleep 50m", pois ficarei com um terminal preso só para isso.
Então vamos ver como criar um lembrete usando o comando at!
Primeiro devemos verificar se o at está instalado, ele não vem mais como padrão no Debian por exemplo:
sudo apt install at
at now + 50 min
Será aberto um prompt do at onde será possível digitar o(s) comando(s) a ser(em) executado(s) daqui a 50 minutos:
at> espeak -vbrazil-mbrola-4 -s 130 "o frango está pronto"
at> ^D
O "^D" da segunda linha na verdade é a saída produzida pela combinação das teclas Ctrl + D, ou seja, após digitar os comandos desejados, tecla Ctrl + D para sair do prompt.
Também é possível usar o pipe para enviar os comandos ao at:
echo espeak -vbrazil-mbrola-4 -s 130 \"o frango está pronto\" | at now + 50 min
Para consultar todas as tarefas agendadas digite:
atq
2 Tue Jun 23 22:14:00 2020 a fabio
Onde:
Se quiser visualizar maiores detalhes sobre a tarefa, como por exemplo os comandos que serão executados, digite:
at -c 2
espeak -vbrazil-mbrola-4 "Frango pronto" -s 130
Substitua o "2" no comando acima pelo número do job em sua fila. Também suprimi a saída do comando, que antes da linha do espeak mostrou uma série de variáveis de ambiente para a execução do mesmo. Ele usa o /bin/sh para execução das tarefas.
Algumas formas de uso para definir as datas de agendamento:
Para remover um agendamento:
atrm <JOB>
Onde JOB é o número do job, exemplo:
atrm 2
Só mais um detalhe que iria passar em branco, o comando "batch" é um atalho para o "at". Quer provas?
cat `which batch`
Para uma explicação mais detalhada, acesse meu vídeo para o canal Cotidiano Hackeado:
echo shutdown -h now | at now
Fonte de pesquisa: Linux at, batch, atq, atrm command help and examples sdfsd
Por exemplo, enquanto escrevo essa dica, tenho um frango assando no forno que ficará pronto daqui a 50 minutos. Como estou no PC, quero agendar um lembrete no meu Linux para quando o mesmo ficar pronto. Não faz muito sentido eu criar uma entrada no cron só para isso, pois ela ficará se repetindo ou então terei de retornar ao cron para remover a entrada.
Também não faz sentido eu executar o lembrete usando combinado com o comando "sleep 50m", pois ficarei com um terminal preso só para isso.
Então vamos ver como criar um lembrete usando o comando at!
Primeiro devemos verificar se o at está instalado, ele não vem mais como padrão no Debian por exemplo:
sudo apt install at
Formas de uso
Para exemplificar sua forma de uso, vamos à prática... quero que meu Linux me avise que o frango está pronto daqui a 50 minutos. Vou usar o espeak para isso (veja esse artigo sobre o espeak).at now + 50 min
Será aberto um prompt do at onde será possível digitar o(s) comando(s) a ser(em) executado(s) daqui a 50 minutos:
at> espeak -vbrazil-mbrola-4 -s 130 "o frango está pronto"
at> ^D
O "^D" da segunda linha na verdade é a saída produzida pela combinação das teclas Ctrl + D, ou seja, após digitar os comandos desejados, tecla Ctrl + D para sair do prompt.
Também é possível usar o pipe para enviar os comandos ao at:
echo espeak -vbrazil-mbrola-4 -s 130 \"o frango está pronto\" | at now + 50 min
Para consultar todas as tarefas agendadas digite:
atq
2 Tue Jun 23 22:14:00 2020 a fabio
Onde:
- 2 é o número da tarefa
- Tue Jun 23 = data
- 22:14:00 = hora
- 2020 = ano
- a = queue
- fabio = usuário
Se quiser visualizar maiores detalhes sobre a tarefa, como por exemplo os comandos que serão executados, digite:
at -c 2
espeak -vbrazil-mbrola-4 "Frango pronto" -s 130
Substitua o "2" no comando acima pelo número do job em sua fila. Também suprimi a saída do comando, que antes da linha do espeak mostrou uma série de variáveis de ambiente para a execução do mesmo. Ele usa o /bin/sh para execução das tarefas.
Algumas formas de uso para definir as datas de agendamento:
| noon | meio dia da presente data |
| midnight | meia noite da presente data |
| teatime | 16h da presente data |
| tomorrow | horário atual, amanhã |
| noon tomorrow | meio dia de amanhã |
| next week | daqui a 1 semana |
| next monday | horário atual na próxima segunda |
| fri | horário atual na sexta-feira |
| nov | mesmo dia e horário atuais, só que em novembro |
| 9:00 AM | próxima 9 horas da manhã |
| 2:00 PM | próxima 2 horas da tarde |
| 2:30 PM Jun 28 | 2 horas e 30 minutos do dia 28 de Junho |
| now + 30 minutes | daqui a 30 minutos |
| now + 1 hour | daqui a 1 hora |
| now + 2 days | daqui a 2 dias |
| 4 PM + 2 days | às 4 da tarde daqui a 2 dias |
| now + 3 weeks | daqui a 3 semanas |
| now + 30 years | daqui a 30 anos (espero que ainda estejamos por aqui! :]) |
Para remover um agendamento:
atrm <JOB>
Onde JOB é o número do job, exemplo:
atrm 2
Só mais um detalhe que iria passar em branco, o comando "batch" é um atalho para o "at". Quer provas?
cat `which batch`
#! /bin/sh -e
if [ "$#" -gt 0 ]; then
echo batch accepts no parameters
exit 1
fi
prefix=/usr
exec_prefix=${prefix}
exec ${exec_prefix}/bin/at -qb now
Para uma explicação mais detalhada, acesse meu vídeo para o canal Cotidiano Hackeado:
Bom, é isso!
echo shutdown -h now | at now
Fonte de pesquisa: Linux at, batch, atq, atrm command help and examples sdfsd