Dans la leçon sur Cron, tu as appris à planifier des tâches répétitives. Mais parfois, tu veux exécuter une commande une seule fois, à un moment précis — sans t'embêter à configurer une tâche Cron. C'est exactement ce que at fait.
Cette leçon te montre aussi batch, qui permet de lancer des commandes quand la charge du système est faible.
at planifie l'exécution d'une commande à un moment donné. Une fois exécutée, c'est fini — pas de répétition. C'est l'équivalent d'un "rendez-vous unique" pour ton terminal.
Sur la plupart des systèmes, at n'est pas installé par défaut. Vérifie d'abord :
which at
at --version
Si la commande n'existe pas, installe-la :
sudo apt update && sudo apt install at
sudo dnf install at
Ensuite, démarre et active le service :
sudo systemctl start atd
sudo systemctl enable atd
at comprend le langage naturel. Voici des exemples :
echo "echo 'Coucou depuis at!' >> ~/test-at.txt" | at 14:30
echo "df -h > ~/disks.txt" | at 16:00 tomorrow
echo "systemctl status nginx" | at now + 2 hours
echo "backup.sh" | at 09:00 15.04.2026
echo "cleanup.sh" | at midnight
echo "rapport.sh" | at teatime
Tu peux aussi entrer dans un shell interactif avec at :
at 17:00
# Tu vois l'invite "at>", tape tes commandes :
echo "=== Rapport du jour ===" > ~/rapport.txt
uptime >> ~/rapport.txt
free -h >> ~/rapport.txt
# Tape Ctrl+D pour valider
💡 Bonne habitude : Utilise toujours le chemin absolu des fichiers dans tes commandes
at. Le job s'exécute dans un environnement minimal, sans les variables d'environnement de ta session.
atq
La sortie affiche le numéro du job, la date, l'heure et la file d'attente.
at -c 5
atrm 5
at utilise des files d'attente nommées avec des lettres :
| File | Description |
|---|---|
a (défaut) | Jobs submités avec at |
b | Jobs submités avec batch |
c à | Files supplémentaires |
at -q b 10:00 tomorrow
at -q b -m 10:00 tomorrow
batch est similaire à at, sauf que les commandes ne s'exécutent que lorsque la charge système descend sous un seuil (par défaut : 1.5, ou le nombre de cœurs). C'est parfait pour des tâches lourdes mais pas urgentes.
echo "/opt/rapport-quotidien.sh" | batch
batch
# Tape tes commandes, puis Ctrl+D
find /home -name "*.tmp" -delete
tar czf /backup/home.tar.gz /home
# Ctrl+D
⏱️ Patience : Avec
batch, ton job attend en queue. Dès que le système est suffisamment calme, il s'exécute automatiquement.
echo "sudo shutdown -r +30" | at now + 30 minutes
sudo shutdown -c
| Caractéristique | at | cron | batch |
|---|---|---|---|
| Usage principal | Exécution unique | Exécution répétitive | Tâche si système calme |
| Répétition | Non | Oui (via crontab) | Non |
| Condition de charge | Non | Non | Oui |
| Persistance après reboot | Non | Oui | Non |
| Difficulté | Facile | Moyenne | Facile |
1. Vérifie que le service atd est actif : systemctl status atd
2. Planifie un job qui écrit la date dans un fichier :
echo "date >> ~/mon-at.txt" | at now + 1 minute
3. Attends une minute, puis vérifie : cat ~/mon-at.txt
4. Liste tes jobs en attente : atq
1. Lance atq pour voir les jobs en attente.
2. Soumets une commande avec batch : echo "uptime > ~/batch-test.txt" | batch
3. Observe la différence dans atq (les jobs batch apparaissent dans la queue b).
1. Crée un petit script ~/rapport.sh :
#!/bin/bash
echo "=== Rapport du $(date) ===" > ~/rapport.txt
echo "Uptime :" >> ~/rapport.txt
uptime >> ~/rapport.txt
echo "Disque :" >> ~/rapport.txt
df -h >> ~/rapport.txt
2. Rend-le exécutable : chmod +x ~/rapport.sh
3. Planifie-le pour demain à 8h : echo "~/rapport.sh" | at 08:00 tomorrow
4. Vérifie avec atq qu'il est bien dans la liste.
at : planifie l'exécution d'une commande une seule fois à un moment précis.batch : exécute les commandes quand la charge système est faible.atq : liste les jobs en attente.atrm : supprime un job avant son exécution.atd doit être actif pour que at et batch fonctionnent.🔗 Pour aller plus loin : La leçon sur Cron et les tâches planifiées te montre comment répéter des tâches automatiquement.