Lorsque votre ordinateur est éteint (ou que le démon cron ne fonctionne pas), les tâches cron ne sont pas lancées.
Si vous avez des tâches que vous souhaitez exécuter après coup pendant les périodes où l'ordinateur est éteint, utilisez anacron. Installé par défaut, voir "man anacron", "man anacrontab", ou le fichier /etc/anacrontab pour plus d'informations.
Ubuntu utilise anacron par défaut pour les entrées dans la crontab :
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
laissant les crontabs restants être gérés par le démon cron principal, spécifiquement :
/etc/crontab
/etc/cron.d
/var/spool/cron
NOTES
Anacron lui-même ne fonctionne pas comme un démon, mais s'appuie sur les scripts de démarrage du système et sur cron lui-même pour fonctionner.
Sur la machine Ubuntu 8.04 que j'ai sous les yeux, le fichier /etc/init.d/anacron est exécuté au démarrage, puis à nouveau par cron chaque matin à 7h30.
Le fichier README dans /usr/share/doc/anacron/README.gz contient un peu plus d'informations que celles contenues dans les pages de manuel.
EXEMPLES
Pour de simples tâches "quotidiennes", "hebdomadaires", "mensuelles", mettez une copie ou un lien symbolique vers le script dans l'un des répertoires /etc/cron.{quotidien|hebdomadaire|monthly} ci-dessus. Anacron se chargera de l'exécuter quotidiennement/hebdomadairement/mensuellement, et si votre ordinateur est éteint le jour où les script "hebdomadaires" devraient normalement être exécutés, il les exécutera la prochaine fois que l'ordinateur sera allumé.
Comme autre exemple, supposons que vous avez un script ici : /usr/local/sbin/maint.sh
Si vous souhaitez l'exécuter tous les trois jours, l'entrée standard dans /etc/crontab ressemblera à ceci :
# m h dom mon dow user command
0 0 */3 * * root /usr/local/sbin/maint.sh
Si votre ordinateur n'était pas allumé à 00h00 le 3 du mois, la tâche ne serait pas exécutée avant le 6.
Pour que le job soit exécuté le 4 lorsque l'ordinateur est éteint et qu'il "rate" l'exécution du 3, vous utiliserez cette ligne dans /etc/anacrontab (n'oubliez pas de supprimer la ligne de /etc/crontab) :
# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh
Le "délai" de "5" ci-dessus signifie qu'anacron attendra 5 minutes avant d'exécuter ce travail. L'idée est d'empêcher anacron de lancer des tâches immédiatement au moment du démarrage.
3 votes
J'ai essayé de chercher un tutoriel anacron sur le web mais je n'en ai pas trouvé de bon. La recherche dans les pages de manuel ne m'a pas non plus beaucoup aidé. Comment puis-je modifier une crontab existante pour qu'elle devienne anacron ? Ou tout autre tutoriel à ce sujet sera très utile.
1 votes
J'ai modifié ma réponse pour y inclure des exemples. J'espère que cela vous aidera !