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

85

Je programme 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 est-elle exécutée après la mise sous tension de l'ordinateur ou est-ce que les tâches manquées ce jour-là sont ignorées? Si les travaux manqués ne reprennent pas, y a-t-il un moyen de configurer cron pour qu'il exécute les tâches manquées après la remise sous tension de l'ordinateur?

seg.server.fault
la source
3
J'ai essayé de chercher un didacticiel anacron sur le Web, mais je n'ai trouvé aucun bon. La recherche dans les pages de manuel ne m'a également pas beaucoup aidé. Comment puis-je changer la crontab existante afin qu'elle soit changée en anacron? Ou tout tutoriel dans ce sera très utile
seg.server.fault
1
J'ai modifié ma réponse pour inclure quelques exemples. J'espère que ça aide!
jeff

Réponses:

70

Lorsque votre ordinateur est éteint (ou que le démon cron n'est pas en cours d'exécution), les tâches cron ne seront pas démarrées.

Si vous avez des tâches à exécuter ultérieurement, 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 de crontab dans:

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

en laissant les crontabs restants à la charge du démon principal cron, plus précisément:

/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 les scripts de démarrage du système et s'exécute lui-même.

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

Le fichier README sur /usr/share/doc/anacron/README.gz contient un peu plus d’informations que ce qui est contenu 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. Si votre ordinateur est éteint le jour où les scripts "hebdomadaires" sont normalement exécutés, il les exécutera à la prochaine utilisation de l'ordinateur.

Autre exemple, supposons que vous ayez 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é le 3 du mois à minuit, la tâche ne serait exécutée que le 6 du mois.

Pour que le travail s'exécute à la place le 4 lorsque l'ordinateur est éteint et "manque" l'exécution du 3, vous l'utiliserez 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 que anacron attendra 5 minutes avant d’exécuter ce travail. L'idée est d'empêcher l'anacron de déclencher des choses immédiatement au moment du démarrage.

Jeff
la source
5
Par défaut, Ubuntu utilise l'anacron.
3dinfluence
1
merci, réponse de 3dincluence - ajustée pour indiquer quels crontabs sont gérés par anacron dans un setip par défaut.
jeff
2
si vous mettez le script dans /etc/cron.*/ plutôt que d'avoir sa propre entrée dans la crontab, n'utilisez pas de "." dans le nom du fichier du script. debian et ubuntu utilisent des pièces d’exécution pour exécuter de tels scripts et, par défaut, ces pièces ignoreront les fichiers avec un fichier. dans le nom du fichier - de manière à ne pas exécuter les versions .dpkg-old et .dpkg-dist des scripts renommés à partir de mises à niveau. alors appelez le script ou le lien symbolique "maint" plutôt que "maint.sh".
cas
OpenSUSE utilise cronie par défaut à partir de 11.2 (actuellement, jusqu'à Tumbleweed / Leap 42.2). Pour l'utiliser anacron, installez le cronie-anacronpaquet.
palswim
13

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

Tyler McHenry
la source
5

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

Alan H
la source
2

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 l'anacron.

KPWINC
la source
2

Cela dépend vraiment du démon cron que vous utilisez. Vixie-cron évitera simplement les tâches manquantes. fcron lancera les crons manqués dès que possible. IIRC est basé sur vixie-cron également. Si c'est ce que vous cherchez, consultez fcron.

gregf
la source