📋 Leçon 45 : Planification de tâches avec at et batch

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.

1. Qu'est-ce que `at` ?

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.

2. Installer et activer le service

Sur la plupart des systèmes, at n'est pas installé par défaut. Vérifie d'abord :

# Vérifier si at est installé
which at
at --version

Si la commande n'existe pas, installe-la :

# Installer at (Debian/Ubuntu)
sudo apt update && sudo apt install at
# Installer at (Fedora/RHEL)
sudo dnf install at

Ensuite, démarre et active le service :

# Démarrer et activer le service at
sudo systemctl start atd
sudo systemctl enable atd

3. Utiliser `at` — Les bases

3.1 Spécifier l'heure

at comprend le langage naturel. Voici des exemples :

# Exécuter à 14h30 aujourd'hui
echo "echo 'Coucou depuis at!' >> ~/test-at.txt" | at 14:30
# Exécuter à 16h00 demain
echo "df -h > ~/disks.txt" | at 16:00 tomorrow
# Exécuter dans 2 heures
echo "systemctl status nginx" | at now + 2 hours
# Exécuter à une date précise
echo "backup.sh" | at 09:00 15.04.2026
# midnight (minuit), noon (midi), teatime (16h)
echo "cleanup.sh" | at midnight
echo "rapport.sh" | at teatime

3.2 Mode interactif

Tu peux aussi entrer dans un shell interactif avec at :

# Ouvrir un shell at pour saisir plusieurs commandes
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.

4. Lister et gérer ses jobs

4.1 Voir les jobs en attente

# Lister les jobs at en attente
atq

La sortie affiche le numéro du job, la date, l'heure et la file d'attente.

4.2 Détails d'un job

# Voir le contenu d'un job spécifique
at -c 5

4.3 Supprimer un job

# Supprimer un job avant son exécution
atrm 5

5. Les files d'attente (queues)

at utilise des files d'attente nommées avec des lettres :

FileDescription
a (défaut)Jobs submités avec at
bJobs submités avec batch
c à Files supplémentaires
# Soumettre un job dans la queue b
at -q b 10:00 tomorrow
# Limiter les ressources d'une queue (exemple)
at -q b -m 10:00 tomorrow

6. `batch` — Exécuter quand le système est calme

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.

# Exécuter la commande quand la charge < 1.5
echo "/opt/rapport-quotidien.sh" | batch
# Mode interactif avec 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.

7. Exemple concret : Planifier un redémarrage différé

# Planifier un redémarrage dans 30 minutes (avec confirmation)
echo "sudo shutdown -r +30" | at now + 30 minutes
# Annuler le redémarrage planifié
sudo shutdown -c

8. Comparaison : `at` vs `cron` vs `batch`

Caractéristiqueatcronbatch
Usage principalExécution uniqueExécution répétitiveTâche si système calme
RépétitionNonOui (via crontab)Non
Condition de chargeNonNonOui
Persistance après rebootNonOuiNon
DifficultéFacileMoyenneFacile

9. Exercices pratiques

🎯 Exercice 1 : Premier job `at`

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

🎯 Exercice 2 : Comparer `at` et `batch`

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).

🎯 Exercice 3 : Automation utile

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.

10. Résumé

🔗 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.