IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Méthodes Discussion :

Méthodes de développement d'un job scheduler ?


Sujet :

Méthodes

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut Méthodes de développement d'un job scheduler ?
    Bonjour,

    Je souhaite développer une sorte de job scheduler très light aujourd'hui (une sorte de cron qui gèrerais les dépendances) et j'aimerais savoir d'après vous quelle serait la (ou les) meilleure(s) méthode(s) afin de gérer la détection et le démarrage des jobs par exemple (ceux n'ayant pas de condition d'entrée, mais simplement une date et une heure).

    si je prend un exemple, mon scheduler a plusieurs jobs en base de données, programmés pour démarrer à tous types d'heures, jours, fréquences etc. par exemple des jobs tous les lundis à telle heure, certains plusieurs fois par jour toute la semaine etc.

    mon problème est le suivant : je ne sais pas vraiment comment gérer :

    1. la détection de tous ces jobs par rapport à la journée actuelle
    2. le lancement de ces jobs par rapport à l'heure actuelle

    j'imagine que j'ai deux solutions pour la détection :

    1. faire une sorte de "montée au plan" (pour ceux qui connaissent Control-M par exemple), admettons à minuit, ou le service détecterait dans la base tous les jobs qui doivent tourner "ce jour" (sur les 24 heures à venir) grâce à des requêtes sur certains champs dans la base (normalement pas compliqué)
    2. guetter la base en permanence

    mais après la "détection", comment faire pour planifier le lancement de ces jobs à telle et telle heure ?

    1. faut-il par exemple tout placer dans un tableau (mémoire), tableau préalablement préparé comportant les heures et minutes, et à chaque minute qui passe, regarder si des jobs sont enregistrés dans le tableau à ce moment là ? et les lancer ?
    2. ou alors pour chaque job préparé, calculer le temps qu'il y a jusqu'à lancer ce job, et sleep en attendant ?

    merci pour vos lumières ! si vous avez des tuyaux, idées etc.. je suis toute ouïe

    ps : je n'ai spécifié aucun langage ni base de données, mais ça devrait normalement être fait en Perl et Oracle, avec une IHM en PHP ou CGI pour gérer le tout, à voir.

    cordialement,

    PS : j'ai un peu trouvé réponse à mes questions ici mais si vous avez d'autres idées je suis preneur (http://unix.stackexchange.com/questi...on-daemon-work)

  2. #2
    Provisoirement toléré
    Homme Profil pro
    Inscrit en
    Août 2002
    Messages
    143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 143
    Points : 261
    Points
    261
    Par défaut
    Projet intéressant

    Perso j'avais déjà eu ce type de problématique et j'étais parti sur la solution d'implémenter un mini cron du type "<pattern de lancement en mode cron> <commande à executer>" (exemple "0 0 13 * 5 run.sh").

    Pour cela quand je lance mon module de cron, je crée un thread par tâches et chaque thread va calculer le prochain temps N en millisecondes avant la prochaine exécution, et fait un sleep(N). A la fin de chaque sleep, j'exécute la tâche et je recalcule.

    Attention par contre si le fichier est modifié pendant que t'as des threads en attente ! Faudra prévoir une petite règle pour gérer ça.

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur Systèmes
    Inscrit en
    Août 2011
    Messages
    75
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Monaco

    Informations professionnelles :
    Activité : Ingénieur Systèmes
    Secteur : Finance

    Informations forums :
    Inscription : Août 2011
    Messages : 75
    Points : 87
    Points
    87
    Par défaut
    Salut,

    je te remercie pour ton expérience, je pense que je vais faire quelque-chose du genre effectivement, c'est à priori comme ça que la plupart des schedulers fonctionnent apparemment, en attendant simplement le moment J avec du sleep. ça peut paraître sommaire mais si ça marche

    après au niveau des signaux, j'imagine que je peux me servir d'un simple envoi de signal unix (à définir) vers le processus enfant (ou thread dans ton cas) et de "trappes" de ces signaux dans chaque process qui est en sleep j'imagine.

    je vais faire quelques tests, merci !

    autre petite question : pour la gestion de tout ça en application client/serveur, j'imagine que je peux faire des "serveurs sockets" sur chaque "client" au final, et faire en sorte que mon "serveur (job scheduler)" se connecte aux clients (qui ont un socket serveur ouvert en permanence) pour balancer les commandes ?

    bonne soirée

Discussions similaires

  1. Méthodes de développement d'un job scheduler ?
    Par frenchlion dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 08/06/2013, 00h29
  2. Api pour Job scheduler
    Par suckthewindow dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 08/08/2007, 22h18
  3. Méthode de développement par module, comment ?
    Par blaise_laporte dans le forum Architecture
    Réponses: 5
    Dernier message: 22/02/2007, 19h01
  4. Conseils sur la méthode de développement objet métier
    Par RamDevTeam dans le forum Langage
    Réponses: 5
    Dernier message: 08/12/2005, 18h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo