Dans cette leçon, tu vas apprendre à planifier des **tâches ponctuelles** avec at et batch. Contrairement à cron qui répète des tâches, at exécute une commande **une seule fois** à un moment précis. batch attend que la charge du système soit assez basse pour lancer ta tâche.
sudo apt update
sudo apt install at -y
sudo systemctl enable atd
sudo systemctl start atd
at -V
# at version 3.2.4
atat planifie une commande pour qu'elle s'exécute **une seule fois**, à l'heure que tu indiques.
at <heure> [jour mois [année]]| Format | Exemple | Signification |
|---|---|---|
HH:MM | 14:30 | Aujourd'hui à 14h30 (ou demain si passé) |
now + N minutes | now + 5 minutes | Dans 5 minutes |
now + N hours | now + 2 hours | Dans 2 heures |
now + N days | now + 3 days | Dans 3 jours |
tomorrow | tomorrow 10am | Demain à 10h |
noon | noon | Aujourd'hui à midi |
midnight | midnight | Aujourd'hui à minuit |
teatime | teatime 4pm | Aujourd'hui à 16h (heure du thé) |
JJ.MM.AAAA | 25.12.2026 09:00 | 25 décembre 2026 à 9h |
Mois JJ année | jan 15 2027 14:00 | 15 janvier 2027 à 14h |
at pas à pasat now + 2 minutesTu verras un prompt at> — tape ta commande puis Ctrl+D :
at> echo "La tâche a exécuté $(date)" >> ~/test_at.log
at> <EOT>
job 1 at Mon Apr 6 08:15:00 2026
at 17:30at> echo "C'est l'heure !" | tee ~/alerte_17h30.txt
at> <EOT>
job 2 at Mon Apr 6 17:30:00 2026
at 9am tomorrowat> /home/utilisateur/scripts/backup_rapide.sh
at> <EOT>
job 3 at Tue Apr 7 09:00:00 2026
at 20:00 <<EOF
tar -czf /backup/home_$(date +%Y%m%d).tar.gz /home/utilisateur/
echo "Sauvegarde terminée" | mail -s "Backup" utilisateur@email.com
EOF
Planifier sans entrer dans le mode interactif :
# Avec un tube (pipe)
echo "/home/utilisateur/scripts/rapport.sh" | at 10am tomorrow
# Avec un here-doc via fichier
cat << 'CMDS' | at now + 1 hour
mkdir -p ~/archives/$(date +%Y%m%d)
cp ~/Documents/*.pdf ~/archives/$(date +%Y%m%d)/
CMDS
batch — exécution quand le système est calmebatch lance ta commande quand la **charge moyenne** du système descend sous 1.5 (par défaut). C'est idéal pour les tâches lourdes qu'on veut faire tourner aux heures creuses.
batchat> tar -czf /backup/plein_backup.tar.gz /home/
at> <EOT>
job 5 at Mon Apr 6 08:20:00 2026
Latâches s'exécutera dès que la charge le permet.
# Lancer quand la charge est sous 0.8
echo "script_lourd.sh" | at -q b -b 0.8
at utilise des files (queues) désignées par une lettre :
| Queue | Nice value | Usage |
|---|---|---|
a à z | -20 à +19 | File a = très prioritaire, z = très patient |
# Queue b (normal)
at -q b 10pm tomorrow
# Queue c (patient)
at -q c 2am
atq
# 3 Mon Apr 7 09:00:00 2026 a utilisateur
# 5 Mon Apr 6 08:20:00 2026 a root
La premièr colonne est le **numéro de job**.
# Par numéro de job
atrm 3
# Supprimer plusieurs
atrm 2 5
atq + atrm# Supprimer le job 7
atrm 7
at avec les permissionsat ?Par défaut, tout le monde. Pourlimiteser :
# Lister les fichiers de contrôle
ls /etc/at*
# Autoriser un utilisateur
sudo echo "utilisateur" > /etc/at.allow
# Interdire un utilisateur
sudo echo "utilisateur" >> /etc/at.deny
at et cron| Critère | at | cron |
|---|---|---|
| Fréquence | Une seule fois | Récurrente |
| Persistance | Job supprimé après exécution | Reste configuré |
| Charge système | batch peut en tenir compte | Non |
| Cas d'usage | Tâche unique programmée | Automatisation récurrente |
| Dépendances | Non (utilise at + sleep pour temporiser) | Oui avec anacron ou scripts |
**Objectif :** Créer une sauvegarde de ton répertoire ~/Documents à exécuter dans 5 minutes.
# 1. Vérifie que at est installé et le service actif
sudo systemctl status atd
# 2. Planifie la tâche
at now + 5 minutes
Dans le prompt at>, tape :
mkdir -p ~/backup_unique
tar -czf ~/backup_unique/docs_backup_$(date +%H%M).tar.gz ~/Documents/
echo "Sauvegarde terminée le $(date)" > ~/backup_unique/rapport.txt
Puis Ctrl+D pour valider.
# 3. Vérifie que le job est dans la queue
atq
# 4. Après quelques minutes, vérifie que ça a fonctionné
ls ~/backup_unique/
cat ~/backup_unique/rapport.txt
**Bonus :** Supprime le job avec atrm AVANT qu'il ne s'exécute, puis reprogramme-le pour demain à 8h avec at 8am tomorrow.
| Commande | Description |
|---|---|
at | Planifier une tâche pour un moment précis |
at now + N minutes | Exécuter dans N minutes |
at tomorrow HH:MM | Exécuter demain à l'heure indiquée |
batch | Exécuter quand la charge système est basse |
atq | Lister les jobs en attente |
atrm | Supprimer un job |
Ctrl+D | Valider et quitter le mode interactif |
at est parfait pour les tâches uniques : un redémarrage différé, un script qui ne doit tourner qu'une fois, ou une action à faire hors des heures de bureau. batch complète le tableau en s'adaptant à la charge réelle de ta machine. ⏰