Comment fonctionne anacron ?

Je suis sur une debian wheezy, je ne suis pas root, et j’exécute certaines tâches via le crontab de mon utilisateur.

Or, ce système n’est pas allumé en permanence. Je souhaiterais donc que le système puisse rattraper son retard si jamais il a été éteint un certain temps. Je crois que c’est l’objet d’anacron qui est installé par défaut.

Or j’ai une tâche, configurée dans le crontab de mon utilisateur pour être lancé chaque nuit à 1h, et je constate que la tâche n’est effectivement lancée que lorsque le système est bien démarré à 1h du matin. Autrement dit, anacron ne semble pas fonctionner.

J’ai l’impression que la documentation sur anacron n’est pas débordante sur internet, que c’est un outil pas forcément très utilisé. Peut-être que vous auriez des connaissances à me transmettre, ou bien des liens vers de la bonne doc.

Ce que je souhaite faire est de lancer une opération de sauvegarde chaque semaine. Et si le système n’est pas en fonction au moment où le cron aurait dû lancer l’opération, je souhaiterais que anacron prenne le relaie et lance l’opération au plus dès que le système est à nouveau opérationnel.

Merci de votre aide.

salut,

anacron ne fonctionne que pour les crons du système définis dans /etc/cron.daily|weekly|monthly, cf /etc/anacrontab.
si tu veux garder ton entrée cron utilisateur, ajoute une entrée @reboot qui lance ton script de sauvegarde (qui lui peut vérifier si il doit effectivement faire la sauvegarde en comparant des dates par example)

Ok, merci lroy pour ta réponse. Ca explique pourquoi je n’arrivais pas - malgré de nombreux essais - à faire ce que je voulais. Je l’écris ici clairement pour que cela puisse à servir à d’autres (puissent les moteurs de recherche venir indexer ce fil…).

Il faut dire que anacron n’est pas vraiment distinct de cron, car en fait anacron se propose aussi de lancer les tâches cron. Seulement, anacron est lancé périodiquement pas cron. Du coup on se retrouve avec un micmac pas forcément évident à comprendre où cron lance anacron qui lance une tâche cron qui aurait dû se lancer avant:doh:

Je ne souhaite pas utiliser le @reboot car cela signifie aussi déporter toute une complexité dans le script lui-même, ce que je cherche plutôt à éviter.

Je vais donc regarder comment intégrer ma tâche utilisateur dans le cron.daily|weekly|monthly. Mais il faudra pour cela recourir aux services de celui qui est root. En lui expliquant, je pense qu’il comprendra. Quelle serait la méthode la moins intrusive pour ajouter une tâche récurrent dans le système de cron ? Puisqu’on a déjà vu qu’on ne pouvait pas utiliser la crontab utilisateur, faut-il jouer sur la crontab de root ?

Voir ce fil de discussion, qui parle du même sujet…

Pour ceux qui chercheraient encore la solution, voici une solution. Elle n’est peut-être pas optimale, mais elle marche.

Rappel du besoin :

[quote]Je suis sur une debian wheezy, je ne suis pas root, et j’exécute certaines tâches via le crontab de mon utilisateur.

Or, ce système n’est pas allumé en permanence. Je souhaiterais donc que le système puisse rattraper son retard si jamais il a été éteint un certain temps.

Ce que je souhaite faire est de lancer une opération de sauvegarde chaque semaine. Et si le système n’est pas en fonction au moment où le cron aurait dû lancer l’opération, je souhaiterais que anacron prenne le relaie et lance l’opération au plus dès que le système est à nouveau opérationnel.[/quote]

Autrement dit, mon besoin est de pouvoir utiliser anacron en espace utilisateur.

La solution proposée pour Ubuntu sur un fil de discussion du site de askubuntu.com fonctionne également pour debian.

J’ai personnellement opté pour la solution 2 car c’est celle qui permet d’être utilisée sans avoir besoin de passer par le user root. Cette solution 2 consiste à recréer une arborescence anacron en espace utilisateur. Ca peut sembler impressionnant, dit comme ça, mais en vérité c’est tout simple : il suffit de créer quelques répertoires et un fichier anacrontab.

J’ajoute une simple précaution qui vous permettra d’éviter quelques jours de recherche et d’incompréhension : dans vos scripts lancés par anacron (ceux qui se trouveront dans [mono]/home/myuser/.anacron/daily[/mono], [mono]/home/myuser/.anacron/weekly[/mono] et [mono]/home/myuser/.anacron/monthly[/mono]), veillez à bien commencer vos scripts pas un shebang (chez moi : [mono]#!/bin/sh[/mono]) car sinon vos scripts ne s’exécuteront pas et vous aurez en retour une erreur plutôt absconse…

Enfin, sachez que si vous utilisez ce mécanisme basé sur anacron, vous n’avez in fine aucune certitude sur la fréquence d’exécution de vos scripts. Je vais illustrer mon propos : si vous demander à anacron de lancer votre script [mono]backup.sh[/mono] qui se trouve dans le répertoire [mono]/home/myuser/.anacron/monthly[/mono], vous pourriez croire que le script se lancera chaque mois. Mais que se passerait-il alors si votre machine restait éteinte plus d’un mois durant ? Faudrait-il lancer le script plusieurs fois au redémarrage ? Et bien non, votre script ne sera lancé qu’une seule fois étant donné que cela fait plus d’un mois qu’il n’a pas été lancé.

Autrement dit, anacron s’assure de laisser au moins 1 jour/semaine/mois entre chaque exécution de script.

Cela signifie que si votre script [mono]backup.sh[/mono] se trouve dans le répertoire [mono]/home/myuser/.anacron/monthly[/mono] et qu’il est lancé le 1er juillet, vous pouvez être sûr qu’il ne sera pas lancé avant le 1er août. En revanche, si votre machine est éteinte du 1er au 15 août, alors votre script sera lancé au redémarrage de la machine le 16 août. Mais le lancement suivant du script ne sera pas le 1er septembre, mais le 16 septembre (un mois après la précédente exécution du script).

La date d’exécution de votre script sera donc amenée à se décaler petit à petit, au fur et à mesure des arrêts de votre machine.

Ce n’est donc pour moi pas la solution idéale, mais c’est une solution qui fonctionne.

En mettant mon script dans le répertoire [mono]/home/myuser/.anacron/monthly[/mono], je me serais attendu à ce que le script soit lancé une fois par mois (quitte à ce qu’il soit lancé le 31 d’un mois, puis le 1er du mois suivant).

Et ne me demandez pas comment il gère les mois de 30 ou de 31 jours (voir celui de 28 ou 29 jours), je n’en sais rien ! Cependant, [mono]man anacrontab[/mono] indique :

Amusez-vous bien avec anacron. Et n’hésitez pas à compléter ma réponse avec toute information utile !