Comando at: Agendamento de Tarefas Unicas no Linux
O Que Voce Vai Aprender
- Como agendar uma tarefa unica com
at - Como listar e cancelar tarefas pendentes com
atq/atrm - Quando usar
atao inves decron
Resumo Rapido
- Executar uma vez em um horario definido -->
at - Executar repetidamente em um agendamento -->
cron/ timer do systemd - Confirme que o
atdesta em execucao primeiro;atqeatrmsao tudo que voce precisa para gerenciar tarefas
Premissas (ambiente alvo)
- SO: Ubuntu / Debian (sistemas baseados em RHEL funcionam da mesma forma)
- O pacote
ate o daemonatdsao necessarios (frequentemente nao instalados por padrao)
O Que e o Comando at?
Conclusao:
atexecuta um comando uma vez em um horario especificado. Ele e feito para tarefas unicas e nao recorrentes.
Enquanto o cron lida com tarefas recorrentes ("todo dia", "toda semana"), o at lida com execucao agendada unica -- "uma vez hoje a noite as 23h" ou "uma vez, daqui a 5 minutos".
Uma tarefa agendada e monitorada pelo atd (o daemon do at), que a executa quando o horario chega. A tarefa sobrevive ao logout ou ao fechamento do shell.
Uma ferramenta relacionada e o batch. Em vez de um horario, o batch executa uma tarefa quando a carga do sistema cai abaixo de um limite. Use-o para empurrar trabalho pesado para fora dos periodos de pico.
O at Esta Pronto para Usar? Verificando e Instalando o atd
Conclusao: Ter o binario do
atnao e suficiente -- tarefas so sao executadas se oatdestiver ativo. Verifique o daemon primeiro.
Em muitos sistemas Ubuntu / Debian o at nao vem instalado por padrao. Instale e verifique:
# Debian / Ubuntu $ sudo apt install at # RHEL / CentOS / Rocky $ sudo dnf install at
Verifique o status do daemon:
$ systemctl status atd
● atd.service - Deferred execution scheduler
Loaded: loaded (/lib/systemd/system/atd.service; enabled; preset: enabled)
Active: active (running) since ...
Se nao estiver active (running), inicie e habilite:
$ sudo systemctl enable --now atd
A causa mais comum de "minha tarefa nunca executou" e um atd parado. Voce pode registrar uma tarefa normalmente, mas se o atd estiver parado nada acontece quando o horario chega.
Como Agendar uma Tarefa?
Conclusao: Execute
at HORARIO, digite comandos no prompt e finalize comCtrl+D. Para scripts, passe-os com-f.
Entrada interativa
$ at now + 5 minutes warning: commands will be executed using /bin/sh at> echo "hello" >> /tmp/at-test.log at> <EOT> job 3 at Fri Jun 5 23:10:00 2026
Digite comandos no prompt at>, depois pressione Ctrl+D (mostrado como <EOT>). Em caso de sucesso, voce recebe um numero de tarefa e o horario agendado.
A partir de um arquivo (recomendado)
Entrada interativa e propensa a erros. Na pratica, passe um script com -f:
$ at -f /path/to/job.sh 23:00
# Passar um comando via pipe $ echo 'tar czf /backup/data.tgz /var/www' | at 02:00 tomorrow
O diretorio de trabalho, variaveis de ambiente e umask sao salvos no momento do envio e restaurados na execucao. Ainda assim, evite depender do PATH -- escreva comandos com caminhos absolutos.
Como Escrever a Especificacao de Horario?
Conclusao: Voce pode usar
HH:MM,now + N unidades,midnight/noon/teatime, e datas explicitas. Especificacoes relativas sao as mais praticas.
O at aceita expressoes de tempo flexiveis. Padroes comuns:
| Formato | Significado |
|---|---|
at 23:00 |
23h hoje (amanha se ja passou) |
at 10:00 AM |
10 da manha |
at now + 30 minutes |
30 minutos a partir de agora |
at now + 2 hours |
2 horas a partir de agora |
at midnight |
00:00 desta noite |
at noon |
12:00 |
at teatime |
16:00 (hora do cha) |
at 02:00 tomorrow |
2h da manha de amanha |
at 10:00 next week |
Mesmo dia da semana na proxima semana, 10:00 |
at 2026-12-31 23:59 |
Data e hora explicitas |
# Exemplo: rotacionar logs as 3h de amanha $ echo '/usr/local/bin/rotate-logs.sh' | at 3:00 tomorrow
Se voce informar um horario que ja passou hoje, o at interpreta como o mesmo horario amanha. Uma tarefa que voce esperava executar "imediatamente" pode escorregar para o dia seguinte. Para mirar confiavelmente no futuro proximo, use now + N minutes.
Como Listar e Cancelar Tarefas?
Conclusao: Liste com
atq, remova comatrm JOBIDe inspecione comat -c JOBID. Esses tres cobrem o gerenciamento de tarefas.
Listar tarefas pendentes (atq)
$ atq
3 Fri Jun 5 23:10:00 2026 a user 5 Sat Jun 6 02:00:00 2026 a user
As colunas sao numero da tarefa / horario agendado / fila / proprietario. a e a fila normal; b e a fila do batch.
Remover uma tarefa (atrm)
$ atrm 3
Exclua pelo numero. Voce pode remover varias de uma vez:
$ atrm 3 5
Inspecionar uma tarefa (at -c)
Para ver exatamente o que esta agendado antes da execucao, use -c:
$ at -c 5
Ele imprime o bloco de restauracao de ambiente salvo e o corpo real do comando.
atq e o mesmo que at -l, e atrm e o mesmo que at -d. Em scripts, os nomes explicitos atq / atrm sao mais claros de ler.
Para Onde Vai a Saida?
Conclusao: O stdout e stderr de uma tarefa sao enviados ao usuario por email local. Sem um servidor de email, a saida e perdida -- redirecione para um arquivo.
A saida de uma tarefa at nao vai para seu terminal; ela vai para o email local do usuario que a submeteu. Leia com mail ou em /var/mail/<user>.
Em um servidor sem MTA (entrega de email), a saida e simplesmente descartada. Para manter resultados de forma confiavel, redirecione dentro da tarefa:
$ echo '/usr/local/bin/backup.sh > /var/log/backup.log 2>&1' | at 02:00
Se uma tarefa "executou mas nao deixou resultado", provavelmente foi para o email, ou voce esqueceu de definir um destino de saida. Sempre redirecione tarefas de producao para um arquivo de log com > ... 2>&1.
Quando Usar at ao Inves de cron?
Conclusao: Use
cron/ timer do systemd para trabalho recorrente eatpara trabalho unico. "Apenas esta noite" ou "uma vez apos a manutencao" se encaixa melhor noat.
| Caso de uso | Recomendado |
|---|---|
| Recorrente (diario, semanal) | cron / timer systemd |
| Uma vez em um horario definido | at |
| Executar quando a carga cair | batch |
| Tarefas recorrentes confiaveis (logs, deps) | timer systemd |
Escrever uma tarefa unica no cron e esquecer de remove-la -- fazendo-a disparar novamente no dia seguinte -- e um erro comum. Quando voce sabe que e de uso unico, o at nao precisa de limpeza e e mais seguro.
Para tarefas recorrentes em geral, veja Basico do cron e Timer do systemd vs cron.
Controle de Acesso e Ressalvas
Conclusao: O acesso ao
ate controlado por/etc/at.allowe/etc/at.deny. Seat.allowexistir, ele tem prioridade.
- Se
/etc/at.allowexistir: apenas usuarios listados podem usar oat - Se
at.allowestiver ausente mas/etc/at.denyexistir: todos exceto usuarios listados podem usa-lo - Se nenhum existir: muitas distros permitem apenas root (comportamento varia por distro)
# Permitir apenas um usuario especifico $ echo 'deploy' | sudo tee -a /etc/at.allow
Em servidores compartilhados, o at pode se tornar um ponto de apoio para executar tarefas. Se voce nao precisa dele, restrinja com at.deny ou pare o atd. Se voce o usa operacionalmente, permita usuarios explicitamente via at.allow.
Resumo
atagenda uma tarefa unica; trabalho recorrente pertence aocron- Tarefas so executam se o
atdestiver ativo -- verifique o daemon primeiro quando nada acontecer - Prefira especificacoes relativas como
now + N minutes; um horario passado rola para o dia seguinte - Gerencie tarefas com
atq(listar) /atrm(remover) /at -c(inspecionar) - A saida vai para o email -- redirecione tarefas de producao para um arquivo de log