Tutoriel Linux

Anacron sous Linux : rattraper une tâche quand la machine était éteinte

Débutant6 min de lecture
À retenirLinux n'est pas réservé aux experts. Le bon point de départ : une distribution accessible, une sauvegarde propre et quelques commandes comprises.

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.

Tux rallume un ordinateur et rattrape une sauvegarde planifiée avec Anacron
Anacron exécute une tâche en retard au prochain démarrage quand sa période est dépassée.

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 :

  • 1 définit une période d’un jour ;
  • 15 ajoute quinze minutes de délai après le démarrage d’anacron ;
  • backup-home est 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.

sudo apt update && sudo apt upgrade