2011-06-09 2 views
3

Je suis en train de développer une application Web qui dépend fortement de la planification des tâches. Les travaux seront extrêmement courts, comme une requête HTTP unique. Cependant, il y en aura beaucoup. Plus de plusieurs milliers d'emplois peuvent être programmés chaque jour, mais pas tous en même temps. Mon premier penchant était d'utiliser crontab pour planifier ces emplois, mais je ne suis pas sûr que ce soit la meilleure solution.Job Scheduling - crontab la meilleure solution?

Je vois crontab principalement utilisé pour planifier des tâches administratives à forte intensité de travail, mais pas pour des emplois très courts. Crontab est-il même adapté à cela? Peut-il gérer un si grand nombre d'emplois? Dois-je implémenter une solution personnalisée? Y at-il des services là-bas qui peuvent fournir une meilleure performance de &?

Merci beaucoup!

+0

Une chose que je garderais à l'esprit est la façon dont le travail se comporte s'il y a un problème de connectivité ou un autre problème. S'il y a un risque de chevauchement des tâches, vous voudrez probablement que quelque chose vous alerte ou prenne d'autres mesures si elles commencent à s'empiler. –

Répondre

0

C'est ce que j'utilise pour mon site personnel. Bien sûr, cron a la capacité d'exécuter des tâches de longue durée, mais cela ne devrait en aucun cas être limité à cela.

0

Cron a une résolution d'une minute; il ne se réveille qu'une fois par minute pour voir si quelque chose devrait être exécuté. Si vous avez besoin de quelque chose avec une résolution plus stricte, vous aurez besoin d'une solution personnalisée.

Aussi, si vous faites cela sur OS X, vous allez utiliser launchd plutôt que Cron. (cron est toujours supporté, cependant).

3

Cron exécutera n'importe quoi - long ou court. Cependant, si vous devez exécuter des milliers d'emplois par jour, vous risquez de rencontrer le problème que la fréquence maximale autorisée par cron est une fois par minute. Si vous avez besoin d'un taux plus élevé, vous devrez chercher d'autres solutions.

Une alternative possible Cron est le contrôleur Fat qui fonctionne comme Cron en ce qu'elle fonctionne essentiellement d'autres programmes, mais a quelques avantages. Le contrôleur Fat peut faire plusieurs choses:

  • Daemonise quoi que ce soit - lui donner tout PHP, Python, quel que soit le script, même une application Java et peut être daemonised dans un processus d'arrière-plan.

  • Mulitask anything - peut exécuter plusieurs instances d'un script/programme en parallèle. Il prend même en charge les commentaires, de sorte que les scripts traitant des lots de données peuvent dire si d'autres instances doivent être exécutées (beaucoup plus de données à traiter) ou s'il n'y a plus de données et donc pas besoin d'exécuter le script pendant un certain temps.

  • Répéter n'importe quoi - tout script peut être réexécuté une fois l'exécution terminée. Vous pouvez également spécifier un intervalle de sorte qu'il attendra x secondes avant de redémarrer (cela peut être utile dans votre cas). Cronalement, il attend x secondes après la fin d'un script avant de redémarrer, cron attendra x minutes après le démarrage d'un script afin qu'il y ait un potentiel qui pourrait se retrouver avec plusieurs instances d'un script en cours d'exécution qui ne correspond pas à ce que vous voulez.

Il y a plus de fonctionnalités dans le pipeline - le projet est en cours de développement et je suis la bienvenue à toutes les suggestions - si elles sont intéressantes alors je ferai de mon mieux pour les intégrer!

Le site est: http://www.4pmp.com/fatcontroller/

Je suis en train de réorganiser le site, donc il est un peu moche pour le moment mais il y a beaucoup d'informations sur la configuration, la mise en route et cas d'utilisation.

+0

Ça a l'air bien! Une fonctionnalité qui serait nécessaire pour moi est la planification complexe, tout comme les expressions CRON le permettent. – Denny

+0

Ce que vous pouvez faire est d'avoir des instances d'exécution cron de The Fat Controller. En s'exécutant en "mode application", il se terminera une fois qu'un script batch n'a plus rien à faire. Je pense que sur le site web, il y a un exemple de ce type de newsletters. – SlappyTheFish

+0

Une autre option consisterait à planifier vos travaux dans une file d'attente enregistrée dans une table db - votre interface utilisateur est peut-être en train de créer ces tâches? Le Fat Controller peut alors exécuter périodiquement un script qui vérifie s'il y a des travaux dans la file d'attente et, si c'est le cas, les exécuter. – SlappyTheFish

0

Mon entreprise crée CloudQuartz (www.thecloudblocks.com) qui vous permet de planifier les tâches via une API et d'obtenir des rappels lorsqu'elles doivent être exécutées.

Nous l'avons fait afin que nous puissions planifier des tâches sur un cluster de serveurs qui n'était pas possible en utilisant CRON ou le planificateur Windows.