Vous programmez une sauvegarde à 02:00, mais le PC portable est éteint à cette heure-là. Avec une ligne cron classique, l’exécution est simplement perdue. anacron répond à ce cas précis : il lance la tâche au prochain démarrage dès qu’il constate que sa période est dépassée.
Je le réserve aux tâches quotidiennes, hebdomadaires ou mensuelles qui tolèrent un retard. Pour une heure précise, une exécution toutes les dix minutes ou un suivi avancé par service, cron et les timers systemd restent plus adaptés.

Choisir entre cron, anacron et un timer systemd
Le choix dépend surtout de la précision attendue et du temps d’allumage de la machine :
- cron convient à une machine allumée au moment prévu et aux fréquences inférieures à une journée ;
- anacron travaille en jours et rattrape une tâche quotidienne, hebdomadaire ou mensuelle après une période d’arrêt ;
- un timer systemd apporte un calendrier plus précis,
Persistent=true, des dépendances et des journaux directement liés à un service.
Anacron ne remplace donc pas cron partout. Il ne cherche pas à exécuter une commande exactement à 08:30. Il vérifie si le nombre de jours prévu s’est écoulé, attend le délai configuré, lance la commande puis enregistre la date. L’heure de la dernière exécution ne sert pas au calcul.
Sur un poste de travail ou un petit serveur qui ne tourne pas en permanence, c’est souvent suffisant. Sur un serveur déjà géré avec systemd, le guide sur les timers systemd offre une solution plus souple pour une nouvelle tâche.
Installer anacron et lire la configuration existante
Sur Debian ou Ubuntu, installez le paquet puis vérifiez la version disponible :
sudo apt update
sudo apt install anacron
anacron -V
Sur Fedora, Rocky Linux ou AlmaLinux, l’implémentation est généralement fournie par la famille de paquets Cronie. Vérifiez le paquet installé avant de modifier quoi que ce soit :
rpm -q cronie cronie-anacron
command -v anacron
Affichez ensuite le fichier principal sans l’éditer :
sudo cat /etc/anacrontab
sudo ls -l /var/spool/anacron
Le premier fichier décrit les tâches. Le second emplacement contient leurs horodatages. Selon la distribution, anacron peut être déclenché par cron, par un service systemd ou au démarrage. Contrôlez ce qui existe réellement :
systemctl status anacron.service --no-pager
systemctl list-timers --all | grep -i anacron
sudo grep -R "anacron" /etc/cron.d /etc/cron.* 2>/dev/null
Ajouter une tâche quotidienne avec une sauvegarde
Commencez par sauvegarder la configuration. Une erreur dans /etc/anacrontab peut empêcher les tâches suivantes d’être prises en compte.
sudo cp /etc/anacrontab /etc/anacrontab.bak-$(date +%F-%H%M)
sudo nano /etc/anacrontab
Ajoutez par exemple cette ligne pour appeler un script de sauvegarde déjà testé :
1 15 backup-home /usr/local/sbin/backup-home.sh >> /var/log/backup-home.log 2>&1
Les quatre champs ont un rôle précis :
1définit une période d’un jour ;15ajoute quinze minutes de délai après le démarrage d’anacron ;backup-homeest l’identifiant unique utilisé pour l’horodatage et les logs ;- le dernier champ contient la commande complète.
Utilisez des chemins absolus dans le script. L’environnement d’une tâche planifiée n’est pas celui de votre session interactive. Vérifiez aussi que le disque de destination est monté avant toute copie. Une sauvegarde qui écrit par erreur dans un simple dossier local peut remplir la partition racine sans protéger la moindre donnée.
Valider la syntaxe puis lancer un test contrôlé
Testez d’abord le script lui-même. Il doit être exécutable, produire le résultat attendu et renvoyer un code différent de zéro en cas d’échec :
sudo test -x /usr/local/sbin/backup-home.sh
sudo /usr/local/sbin/backup-home.sh
echo $?
Validez ensuite le fichier anacrontab sans lancer la tâche :
sudo anacron -T
Une absence de sortie avec un code retour nul indique que la syntaxe est acceptée. Pour exécuter uniquement la tâche backup-home sans attendre son délai ni sa période, utilisez :
sudo anacron -f -n -d backup-home
Cette commande lance réellement le script. Ne la testez pas avec une suppression, une synchronisation --delete ou une opération non réversible. Les options forcent la tâche, annulent le délai et gardent anacron au premier plan pour afficher son activité.
Retrouver l’exécution dans les logs et l’horodatage
Après le test, contrôlez d’abord le résultat métier, par exemple la présence et la date des fichiers sauvegardés. L’horodatage anacron confirme seulement que la commande a été lancée et terminée :
sudo stat /var/spool/anacron/backup-home
sudo tail -n 80 /var/log/backup-home.log
Sur une distribution avec une unité systemd, consultez aussi :
sudo journalctl -u anacron.service -n 80 --no-pager
sudo journalctl -t anacron -n 80 --no-pager
Si ces commandes restent vides, regardez le journal cron de la distribution, souvent /var/log/syslog sur Debian ou Ubuntu et /var/log/cron sur la famille RHEL. Le guide sur journalctl et les logs du démarrage aide à retrouver le déclenchement après un boot.
Attention à un détail : anacron enregistre la date quand la commande se termine, même si votre script a échoué. Il ne devient pas un système de reprise sur erreur. Le script doit journaliser son résultat, vérifier ses prérequis et envoyer une alerte si la tâche est critique.
Les limites à connaître avant de remplacer un cron
N’utilisez pas anacron pour une tâche qui doit partir à une minute précise. Sa période est calculée en jours et le délai commence quand anacron est déclenché. Après plusieurs jours d’arrêt, chaque identifiant en retard est exécuté une fois, pas une fois par journée manquée.
Ne déplacez pas non plus une tâche existante avant d’avoir identifié son utilisateur. /etc/anacrontab est généralement traité avec les droits root. Une commande copiée depuis la crontab d’un utilisateur peut alors créer des fichiers avec le mauvais propriétaire ou accéder à des données qu’elle ne devrait pas toucher.
La page de manuel d’anacron documente les options de test et d’exécution. Le manuel d’anacrontab précise les champs période, délai, identifiant et commande. Gardez l’ancien cron commenté pendant un cycle complet, vérifiez la sortie réelle de la tâche, puis supprimez-le seulement quand le rattrapage fonctionne.