Tutoriel Linux

Programar um comando único no Linux sem criar uma tarefa cron permanente

Débutant3 min de lecture

Você precisa executar um comando apenas uma vez esta noite, amanhã de manhã ou após uma janela de manutenção? at evita criar uma linha cron que você acabará esquecendo. No entanto, ele tem uma limitação: o serviço atd deve estar em execução, e o comando será executado por /bin/sh, e não necessariamente pelo seu shell interativo.

A metodologia abaixo permite agendar, controlar e depois remover um job antes de sua execução. Utilize um caminho absoluto para os scripts e os arquivos de log. Um job at não se beneficia do seu terminal nem das suas configurações Bash.

Tux perto de um servidor, de um relógio e de um calendário para programar um comando único no Linux
O serviço atd executa um comando único na hora programada.

Instalar at e verificar o serviço

No Debian, Ubuntu e suas derivações, instale o pacote e depois ative o daemon. No Fedora, RHEL ou Rocky Linux, substitua apt por dnf.

sudo apt update
sudo apt install at
sudo systemctl enable --now atd
systemctl status atd --no-pager

O status deve indicar active (running). Se sua conta receber uma negativa, verifique /etc/at.allow e /etc/at.deny. Esses arquivos determinam quais usuários têm permissão para submeter tarefas.

Agendar um comando sem deixar um cron

Para testar sem mexer no sistema, crie um pequeno arquivo na sua pasta pessoal em cinco minutos. Digite o comando e, em seguida, finalize a entrada com Ctrl + D.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# então pressione Ctrl+D

Para uma intervenção real, evite caminhos relativos. O job a seguir reinicia um serviço amanhã às 02:30 e mantém stdout e stderr em um log conhecido:

at 02:30 tomorrow
/usr/bin/systemctl restart meu-serviço.service >> /var/log/meu-serviço-at.log 2>&1
# então pressione Ctrl+D

Não agende um reinício ou uma modificação remota sem ter verificado o comando manualmente. Se você estiver trabalhando via SSH, mantenha uma segunda sessão aberta antes de uma mudança que possa cortar a rede ou o serviço.

Revisar o job e verificar a hora da máquina

atq exibe os jobs em espera com seu identificador. at -c permite ver o script realmente registrado. Esta leitura é útil quando uma variável, um diretório atual ou uma redireção conta para seu comando.

atq
at -c 7
timedatectl status

Substitua 7 pelo número exibido por atq. Verifique também o fuso horário com timedatectl status. A data digitada no at é interpretada pela máquina que executa o daemon. Um servidor configurado para UTC não iniciará necessariamente o job na hora exibida em seu terminal.

Cancelar um job antes de sua execução

A remoção é imediata. Recupere o identificador, remova o job e depois relance atq para confirmar que ele desapareceu.

atrm 7
atq

Use at para uma ação pontual: uma purgação após migração, um reinício único ou um teste diferido. Para uma tarefa repetida, considere usar cron e crontab ou um timer systemd. Você evitará principalmente transformar um comando planejado uma vez em uma automação esquecida.