Aller au contenu principal

atd — Exécution différée de tâches

atd est le démon de la commande at : il exécute une commande une seule fois, à un instant donné dans le futur. Contrairement à cron (récurrent), at est fait pour du ponctuel : « exécute ceci ce soir à 22h » sans avoir à créer puis supprimer une entrée cron.

Installation

sudo apt install at
sudo dnf install at
sudo pacman -S at

sudo systemctl enable --now atd

Fichiers de configuration

FichierRôle
/etc/at.allowListe blanche des utilisateurs autorisés à utiliser at
/etc/at.denyListe noire (si at.allow absent)
/var/spool/cron/atjobs/Fichiers des tâches en attente
/var/spool/cron/atspool/Sortie des tâches exécutées

Commandes utiles

at 22:00 # planifier une tâche interactive (Ctrl+D pour valider)
at now + 30 minutes
at 14:00 tomorrow
atq # lister les tâches en attente (= at -l)
atrm <job_id> # annuler une tâche (= at -d)
systemctl status atd

Exemple de configuration

echo "/usr/local/bin/purge-tmp.sh" | at 23:30
atq
# 3 Thu Mar 6 23:30:00 2026 a matteo

Planifie l'exécution d'un script de purge une seule fois ce soir à 23h30, sans passer par une crontab.

Sécurisation

  • Restreindre l'accès via /etc/at.allow (liste blanche) plutôt que de laisser tout utilisateur planifier des tâches.
  • Les tâches at s'exécutent avec l'environnement et les droits de l'utilisateur qui les a soumises — vérifier qu'aucun secret n'est passé en clair dans la commande (visible via atq/at -c <job>).
  • Auditer régulièrement atq sur un système sensible : une tâche at est un vecteur de persistance classique utilisé en post-exploitation.

Logs & dépannage

journalctl -u atd -f
at -c <job_id> # afficher le contenu exact d'une tâche en attente

Si une tâche planifiée ne s'exécute pas : vérifier que atd tourne (systemctl status atd) et que l'utilisateur est bien autorisé (at.allow/at.deny).

Voir aussi

  • cron — pour des tâches récurrentes plutôt que ponctuelles