6 POSIX Shell - agendamento de execução de comando
Dalton Scavassa edited this page 2026-07-02 18:43:34 -03:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

POSIX Shell — agendamento de execução de um comando

Em qualquer sistema operacional que implemente os padrões de interoperabilidade POSIX, além do at, descrito abaixo, também é possível, com simplicidade maior ainda, por exemplo, deixar algo dormindo por 10 minutos (600s), assim:

sh -c 'sleep 600 && comando_que_quer_executar'

Enquanto isso estiver em primeiro plano, pode até apertar Ctrl + z, listar com o comando jobs, e depois usar p. ex. bg 1 para deixar rodar no fundo, fg 1 pra retornar à frente etc. (TODO: esclarecer)

Já para algo a ser executado rotineiramente em algum padrão de data/horário, usa-se cron, crontab etc.

at

O programa at serve para definir a execução de um comando em determinado momento. Seu funcionamento padrão é definido pela POSIX e uma implementação com extensões está disponível em Debian GNU/Linux e derivados, fornecida pelo pacote at no repositório main.

Tomemos como exemplo um pedido que nos faria executar, com determinado user chamado diministrador, um script existente ~/scripts/atualizar_bd/atualizar_bd.sh. Desejamos que isso ocorra às 11h da manhã. O Shell já deve estar aberto com o usuário que vai executar os comandos.

Ainda que a máquina já tenha definido por padrão o fuso horário desejado, se quisermos garantir que não haja confusão, podemos especificá-lo ao iniciarmos o processo de registrar um comando para ser executado, por exemplo, às 13h15min de hoje:

TZ=America/Sao_Paulo at 13:15 today

Será apresentado o prompt at>, perante o qual deve ser feita a entrada dos comandos que serão executados. Se o script não está preparado para ser invocado de qualquer diretório e sim apenas a partir do próprio, considerando que o comando && executa o próximo apenas se o código retornado pelo anterior foi 0 (padrão que indica não ter terminado com erro), podemos informar a seguinte linha:

cd ~/scripts/atualizar_bd && ./atualizar_bd.sh

Então, basta pressionar Ctrl + d para sair normalmente, o que salva, ou, desejando interromper o procedimento, Ctrl + c.

Listar agendamentos

at -l

Saída de exemplo:

5       Mon Jun 29 13:15:00 2026 a diministrador                                                                                                                  

Remover um agendamento

Com base no índice retornado pela listagem acima:

at -r 5

POSIX vs. Debian

Os parâmetros -l e -r são definidos pela POSIX, ou seja, usáveis em qualquer sistema operacional que implemente o padrão. Também poderiam ser usados os comandos atq e atrm 5, específicos do pacote concreto citado, para, respectivamente, exibir sua fila (queue) e para remover um agendamento.

Fontes e mais detalhes