151 votes

Planification des tâches à l'aide de crontab, que se passera-t-il si l'ordinateur est arrêté pendant ce temps ?

Je planifie certaines tâches en utilisant crontab.

Que se passera-t-il si mon ordinateur est arrêté ou mis hors tension pendant la période où cron était programmé pour faire quelque chose ?

Chaque tâche cron manquée s'exécute-t-elle après la mise sous tension de l'ordinateur, ou les tâches manquées de la journée sont-elles ignorées ? Si les tâches manquées ne sont pas reprises, existe-t-il un moyen de configurer cron de manière à ce qu'il exécute les tâches manquées après la remise sous tension de l'ordinateur ?

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 !

122voto

jeff Points 2976

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.

5 votes

Par défaut, Ubuntu utilise anacron.

1 votes

Merci, 3dincluence -- réponse ajustée pour indiquer quels crontabs sont gérés par anacron dans un setip ubuntu par défaut.

4 votes

Si vous mettez le script dans /etc/cron.*/ plutôt que d'avoir sa propre entrée crontab, n'ayez pas de "." dans le nom de fichier du script. debian et ubuntu utilisent run-parts pour exécuter de tels script, et par défaut run-parts ignorera les fichiers avec un . dans le nom de fichier - c'est pour qu'il n'exécute pas les versions .dpkg-old et .dpkg-dist de script qui sont renommés lors des mises à jour. appelez donc le script ou le lien symbolique "maint" plutôt que "maint.sh".

24voto

Zathrus Points 5385

Cela dépend du programmateur cron que vous utilisez. Le démon cron de base, vanille, n'exécutera pas les tâches qui ont été manquées en raison d'un arrêt du système. Cependant, il existe d'autres planificateurs cron spécialement conçus pour cette situation qui le feront pour vous. Les deux exemples les plus courants sont anacron y fcron .

9voto

Daniel Benamy Points 468

Les tâches planifiées lorsque l'ordinateur est éteint ne seront pas exécutées lorsque l'ordinateur sera rallumé.

5voto

KPWINC Points 11174

Si vous vous arrêtez pendant que les tâches cron sont en cours, le système s'arrête et les tâches cron s'arrêtent (ou ne s'exécutent pas).

Une alternative que vous pouvez vérifier est anacron.

3voto

IELLO Points 11

Cela dépend vraiment du cron deamon que vous exécutez. Vixie-cron va juste sauter les cronjobs qui ont été manqués. fcron va exécuter des crons manqués dès qu'il le pourra. Il est basé sur vixie-cron, donc si c'est ce que vous recherchez, vous pouvez aussi consulter fcron.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X