Tutoriel Linux

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

Débutant3 min de lecture

Você precisa agendar um comando uma única vez esta noite, amanhã de manhã ou após uma janela de manutenção? at evita criar uma linha cron que você esquecerá depois. No entanto, ele mantém uma restrição: o serviço atd deve estar em execução, e o comando será executado por /bin/sh, não necessariamente pelo seu shell interativo.

A metodologia abaixo permite agendar, controlar e depois remover um job antes de sua execução. Use um caminho absoluto para os scripts e os arquivos de log. Um job at não se beneficia do seu terminal nem de todas as 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 no horário programado.

Instalar at e verificar o serviço

No Debian, Ubuntu e seus derivados, 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 um recuso, verifique /etc/at.allow e /etc/at.deny. Esses arquivos determinam quais usuários têm permissão para enviar tarefas.

Agendar um comando sem deixar um cron

Para testar sem afetar o sistema, crie um pequeno arquivo no seu diretório pessoal em cinco minutos. Digite o comando e 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 seguinte 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 mudança 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 pendentes 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 inserida no at é interpretada pela máquina que executa o daemon. Um servidor configurado para UTC não iniciará necessariamente o job na hora exibida na sua estação.

Cancelar um job antes de sua execução

A remoção é imediata. Pegue 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 após migração, um reinício único ou um teste adiado. Para uma tarefa repetida, prefira cron e crontab ou um timer systemd. Você evitará principalmente transformar um comando programado uma vez em uma automação esquecida.

sudo apt update && sudo apt upgrade