Tutoriel Linux

Programmer une commande unique sous Linux sans créer une tâche cron permanente

Débutant3 min de lecture

Vous devez lancer une commande une seule fois ce soir, demain matin ou après une fenêtre de maintenance ? at évite de créer une ligne cron que vous oublierez ensuite. Il garde toutefois une contrainte : le service atd doit tourner, et la commande sera exécutée par /bin/sh, pas forcément par votre shell interactif.

La méthode ci-dessous permet de planifier, contrôler puis retirer un job avant son exécution. Utilisez un chemin absolu pour les scripts et les fichiers de log. Un job at ne bénéficie pas de votre terminal ni de tous vos réglages Bash.

Tux près d'un serveur, d'une horloge et d'un calendrier pour programmer une commande unique sous Linux
Le service atd exécute une commande unique à l’heure programmée.

Installer at et vérifier le service

Sur Debian, Ubuntu et leurs dérivées, installez le paquet puis activez le démon. Sur Fedora, RHEL ou Rocky Linux, remplacez apt par dnf.

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

Le statut doit indiquer active (running). Si votre compte reçoit un refus, contrôlez /etc/at.allow et /etc/at.deny. Ces fichiers déterminent quels utilisateurs ont le droit de soumettre des tâches.

Planifier une commande sans laisser de cron

Pour tester sans toucher au système, créez un petit fichier dans votre dossier personnel dans cinq minutes. Tapez la commande, puis terminez la saisie par Ctrl + D.

at now + 5 minutes
mkdir -p "$HOME/at-test"
date > "$HOME/at-test/executed-at.txt"
# puis appuyez sur Ctrl+D

Pour une intervention réelle, évitez les chemins relatifs. Le job suivant redémarre un service demain à 02:30 et conserve stdout et stderr dans un log connu :

at 02:30 tomorrow
/usr/bin/systemctl restart mon-service.service >> /var/log/mon-service-at.log 2>&1
# puis appuyez sur Ctrl+D

Ne planifiez pas un redémarrage ou une modification distante sans avoir vérifié la commande manuellement. Si vous travaillez en SSH, gardez une seconde session ouverte avant un changement qui peut couper le réseau ou le service.

Relire le job et contrôler l’heure de la machine

atq affiche les jobs en attente avec leur identifiant. at -c permet de voir le script réellement enregistré. Cette lecture est utile quand une variable, un répertoire courant ou une redirection compte pour votre commande.

atq
at -c 7
timedatectl status

Remplacez 7 par le numéro affiché par atq. Vérifiez aussi le fuseau horaire avec timedatectl status. La date saisie dans at est interprétée par la machine qui exécute le démon. Un serveur réglé sur UTC ne lancera pas forcément le job à l’heure affichée sur votre poste.

Annuler un job avant son exécution

La suppression est immédiate. Reprenez l’identifiant, retirez le job, puis relancez atq pour confirmer qu’il a disparu.

atrm 7
atq

Utilisez at pour une action ponctuelle : une purge après migration, un redémarrage unique ou un test différé. Pour une tâche répétée, gardez plutôt cron et crontab ou un timer systemd. Vous éviterez surtout de transformer une commande prévue une fois en automatisation oubliée.

sudo apt update && sudo apt upgrade