at în Linux / Bash

Procese și monitorizare at (pachetul at, serviciul atd)

Programează o comandă să ruleze o singură dată, la o oră anume, spre deosebire de cron, care repetă sarcinile.

Sintaxă comandă
at [opțiuni] ORA
atq
atrm NUMĂR_JOB
batch

Ce face at

Comanda at citește comenzile de la intrarea standard (sau dintr-un fișier, cu -f) și le execută o singură dată, la ora indicată, prin serviciul atd. Ora se poate scrie în multe forme: 22:00, now + 30 minutes, tomorrow 08:00, noon, midnight.

atq listează joburile programate ale utilizatorului, iar atrm șterge un job după număr. batch pune comanda într-o coadă care pornește când încărcarea sistemului scade sub un prag (implicit 1.5).

Pachetul nu este instalat implicit pe toate distribuțiile: pe Debian/Ubuntu se instalează cu sudo apt install at, iar serviciul pornește cu sudo systemctl enable --now atd. Ieșirea comenzilor programate se trimite prin e-mail local, deci redirecționeaz-o într-un fișier.

Opțiuni și argumente

Opțiune / Parametru Descriere
ORA Momentul execuției: HH:MM, now + N minutes|hours|days, tomorrow, o dată ca 10:00 2026-11-01.
-f FIȘIER Citește comenzile din fișier, nu de la tastatură.
-l La fel ca atq: listează joburile.
-r, -d La fel ca atrm: șterge joburi.
-c NUMĂR Afișează conținutul complet al unui job programat.
-m Trimite e-mail utilizatorului la final, chiar dacă nu există ieșire.

Exemple

Exemplul 1: Repornirea unui serviciu peste o oră

Comanda vine prin pipe. at anunță că folosește /bin/sh și afișează numărul jobului.

echo "systemctl restart php8.4-fpm" | sudo at now + 1 hour

Ieșire în terminal

warning: commands will be executed using /bin/sh
job 4 at Sun Oct 25 15:30:00 2026

Exemplul 2: Un raport diseară la 22:00, apoi lista joburilor

Ieșirea scriptului merge într-un fișier. atq arată numărul jobului, data, coada (a) și utilizatorul.

echo "/home/ana/raport_vanzari.sh > /home/ana/raport.log 2>&1" | at 22:00
atq

Ieșire în terminal

warning: commands will be executed using /bin/sh
job 5 at Sun Oct 25 22:00:00 2026
5	Sun Oct 25 22:00:00 2026 a ana

Exemplul 3: Anularea unui job programat

Dacă numărul nu există, atrm spune asta. După ștergere, atq nu mai afișează jobul 5.

atrm 5
atrm 9
atq

Ieșire în terminal

Cannot find jobid 9
4	Sun Oct 25 15:30:00 2026 a ana

Greșeli frecvente

  • Folosirea lui at pentru sarcini repetate: pentru „în fiecare noapte” folosește crontab sau un timer systemd.
  • Comenzi care depind de mediul interactiv: jobul rulează cu /bin/sh, fără aliasurile tale. Folosește căi absolute.
  • Serviciul atd oprit sau neinstalat: jobul se programează, dar nu rulează niciodată. Verifică cu systemctl status atd.

Comenzi înrudite

  • systemd timers (systemctl list-timers): Programează sarcini repetate cu unități .timer în systemd, o alternativă la cron cu jurnal și dependențe.
  • systemctl: Controlează sistemul de inițializare systemd și administrează serviciile (demoni de fundal).
  • nohup: Pornește o comandă care continuă să ruleze și după ce închizi terminalul sau sesiunea SSH.