web-dev-qa-db-fra.com

Planification des tâches à l'aide de crontab, que se passera-t-il lorsque l'ordinateur sera arrêté pendant cette période?

Je planifie certaines tâches en utilisant crontab.

Que se passera-t-il si mon ordinateur est éteint ou éteint pendant que Cron devait 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 cette journée sont-elles ignorées? Si les travaux manqués ne reprennent pas, existe-t-il un moyen de configurer cron de telle sorte qu'il exécute les tâches manquées après la remise sous tension de l'ordinateur?

92
seg.server.fault

Lorsque votre ordinateur est arrêté (ou que le démon cron ne fonctionne pas autrement), les tâches cron ne sont pas démarrées.

Si vous souhaitez exécuter des travaux après coup pendant les périodes d'arrêt de l'ordinateur, 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 crontab dans:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

laissant les crontabs restants à gérer par le démon cron principal, en particulier:

/etc/crontab
/etc/cron.d
/var/spool/cron

REMARQUES

Anacron lui-même ne s'exécute pas en tant que démon, mais s'appuie sur des scripts de démarrage du système et se cron pour s'exécuter.

Sur la boîte Ubuntu 8.04 que je regarde, /etc/init.d/anacron est exécuté au démarrage, et à nouveau par cron chaque matin à 07h30.

Le README at /usr/share/doc/anacron/README.gz contient un peu plus d'informations que celles contenues dans les pages de manuel.

EXEMPLES

Pour les travaux simples "quotidiens", "hebdomadaires", "mensuels", placez une copie ou un lien symbolique vers le script dans l'un des répertoires /etc/cron.{daily|weekly|monthly} ci-dessus. Anacron se chargera de l'exécuter quotidiennement/hebdomadairement/mensuellement, et si votre ordinateur est éteint le jour où les scripts "hebdomadaires" s'exécuteront normalement, il les exécutera la prochaine fois que l'ordinateur sera allumé.

Comme autre exemple, en supposant que vous avez un script ici: /usr/local/sbin/maint.sh

Et vous souhaitez l'exécuter tous les trois jours, l'entrée standard dans/etc/crontab ressemblerait à 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, le travail ne s'exécuterait pas avant le 6.

Pour que le travail s'exécute à la place le 4 lorsque l'ordinateur est éteint et "manque" l'exécution le 3, vous devez utiliser ceci 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 "retard" de "5" ci-dessus signifie que anacron attendra 5 minutes avant d'exécuter cette tâche. L'idée est d'empêcher anacron de tirer des objets immédiatement au démarrage.

76
jeff

Cela dépend du planificateur cron que vous utilisez. Le démon de base Vanilla cron n'exécutera pas les tâches manquées en raison d'un temps d'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 et fcron .

17
Tyler McHenry

Les tâches planifiées alors que l'ordinateur est éteint ne seront pas exécutées lorsque l'ordinateur se rallumera

6
Alan H

Si vous arrêtez pendant l'exécution des tâches cron, 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.

3
KPWINC

Cela dépend vraiment du démon cron que vous utilisez. Vixie-cron sautera simplement les tâches cron manquées. fcron exécutera les crons manqués dès que possible. IIRC est également basé sur vixie-cron, donc si c'est ce que vous recherchez, vous voudrez peut-être consulter fcron.

3
gregf