web-dev-qa-db-fra.com

Sont multiples @daily crontab entrées traitées dans l'ordre, en série?

Je veux que deux emplois courent chaque jour, en série, exactement dans l'ordre que je précise. Est-ce que cela crontab fait de manière fiable ce que je veux?

@daily job1
@daily job2

Je suppose qu'ils courent l'un après l'autre, mais je ne pouvais pas trouver la réponse en recherchant sur le Web ni à partir de ces manuels: cron(1), crontab(1), crontab(5).

Le crontab ci-dessus ne fera évidemment pas ce que je veux si Cron gère les choses planifiées avec @daily En parallèle ou dans une commande imprévisible.

Je sais que je peux simplement faire un script shell pour les tirer dans l'ordre, je suis juste curieux de savoir comment Cron est censé travailler (et je suis trop paresseux pour recueillir des données de test ou lire le code source).

Cron est fourni par le package cron. OS est Ubuntu 10.04 LTS (serveur).

22
Adam Monsen

Après un coup d'œil rapide à la source (à Debian Squeeze, que je pense, c'est la même version), il ressemble à des entrées dans un fichier donné et les mêmes temps sont exécutés dans l'ordre. Dans ce but, @daily et 0 0 * * * sont identiques (en fait @daily est identique à 0 0 * * * dans ce cron).

Je ne compterais pas sur cela à travers le tableau. Il est possible qu'un jour, quelqu'un décidera que Cron devrait exécuter des emplois en parallèle, pour tirer parti de ces processeurs de 32 nœuds contenant 31 cœurs fonctionnant au ralenti. Cela pourrait être fait lors de la mise en œuvre de cet article de TODO de 20 ans rencontré dans la source cron:

Tous ces éléments doivent être signalés et limités de charge; C'est-à-dire, au lieu de @Hourly signification "0 * * * *" "Cela devrait signifier" près de l'avant de chaque heure mais pas "jusqu'à ce que la charge du système soit faible". (...) (VIX, Jan90)

Il est très facile d'écrire @daily job1; job2 ici. S'il est important que les emplois s'exécutent dans l'ordre, en faites une conséquence directe de ce que vous écrivez.

En outre, la commande explicite élimine le risque qu'un futur administrateur réorganisera les lignes qui pensent que cela n'aura pas d'importance.

http://ss64.com/osx/crontab.html (ainsi que d'autres références) dit que @Daily est équivalent à

0 0 * * *

qui dit courir à minuit. Je m'attendrais à ce que deux lignes de ce type soient lancées aussi près que possible de minuit, sans aucune garantie pour laquelle il fonctionnerait en premier. Je suis d'accord avec la suggestion de JW013 dans son commentaire:

Le fait qu'il soit sous-spécifié signifie généralement qu'il est laissé à la mise en œuvre, et il est généralement préférable de ne pas dépendre de ce comportement. Il est probablement plus propre et mieux organisé pour mettre une séquence d'emplois où la séquence compte dans son propre script au lieu d'entrées de crontab distinctes.

5
Tom Barron

@Giles Commentaire sur l'utilisation d'un seul script lors de l'importation pour exécuter les choses dans la commande est appropriée.

cron.daily Les fichiers ne spécifient pas les temps d'exécution. Cela a été mon expérience qu'ils fonctionnent en série. Cela donne un sens autant d'emplois de fond qui pourraient courir sur un ordinateur portable ou autre système

Lorsque les temps sont spécifiés, tous les travaux prévus pour la minute actuelle sont exécutés. C'est une bonne idée d'utiliser des moments différents.

Si vous avez des emplois qui sont mutuellement exclusifs, il est courant d'utiliser un fichier de verrouillage pour déterminer si l'autre travail est en cours d'exécution.

0
BillThor