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

Unix Discussion :

[HP-UX 11.00] Détecter un traitement en cours d'exécution


Sujet :

Unix

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 1
    Points : 1
    Points
    1
    Par défaut [HP-UX 11.00] Détecter un traitement en cours d'exécution
    Bonjour,

    voici mon problème. Un traitement est planifié par crontab pour se déclencher à 12h00 et 17h00 tous les jours.

    En début de traitement, on effectue un test pour savoir si une autre instance de ce même traitement ne serait pas déjà en train de tourner.
    Si c'est le cas, le traitement en cours s'arrête.

    Par exemple, le traitement s'appelle "traitement_planifie.sh".
    Le traitement de 17h00 se déclenche.
    On regarde s'il n'y a pas un process "traitement_planifie.sh" qui serait toujours actif.

    Le test actuel fonctionne correctement ... sauf quand il plante
    C'est à dire que parfois (et c'est rare !) le test détecte une autre instance du traitement alors que ce n'est pas le cas.
    J'en arrive à croire que les fausses alertes sont dues au test lui-même

    Voici le shell en question avec le test (supposé) bancal :

    ### shell : traitement_planifie.sh ######################
    #!/usr/bin/sh
    ps -fu usr2
    sleep 2;
    cd $DIR_SH;
    pid=$$;
    other_process=`ps -ef | grep \`basename $0\` | grep \`whoami\` | grep -v grep | grep -sv $pid | grep -v "/usr/bin/sh" | cut -c10-14 | wc -l`;
    if [ $other_process -gt 0 ]
    then
    echo "Traitement déjà en cours sur ce serveur. Veuillez réessayer ultérieurement.";
    exit -1;
    fi

    perl traitements_planifies.pl
    ####################################

    "usr2" est le compte utilisé pour lancer le traitement.
    le "ps -fu usr2" n'est donc là qu'à des fins de logs.

    Le test cherche donc les process :
    * qui se nomment traitement_planifie.sh
    * qui sont lancés par usr2
    * qui ne sont pas un grep
    * qui ne sont pas le traitement en cours (cf le $pid=$$)
    * qui ne sont pas lancés depuis /usr/bin/sh

    J'en arrive aux points où vous intervenez

    1/ voyez vous ce qui cloche dans le test ?

    Je ne comprends pas pourquoi il lui arrive de ne pas fonctionner.
    Un collègue m'a parlé de forks entre tous les greps qui feraient que le résultat de la commande finale ne serait pas toujours le même.
    (Si j'ai écrit une grosse connerie, c'est normal, j'ai rien pigé )

    2/ comment bien détecter si le traitement tourne déjà ?

    Je cherche une solution basée sur l'analyse des process. Par exemple, l'analyse de la log générée par le traitement ne va pas car je ne peux me baser ni sur la date du fichier de log ni sur son contenu

    Merci à tous ceux qui auront lu mon (très long) post.
    Double merci à tous ceux qui y répondront.
    Mille mercis à celui qui m'éclairera de sa lumière divine. Que son nom soit sanctifié. Je m'incline devant lui et lui baise les pieds

  2. #2
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Il n'y a pas pgrep sur AIX ?
    ɹǝsn *sıɹɐlos*

  3. #3
    Futur Membre du Club
    Inscrit en
    Janvier 2009
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Janvier 2009
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Ton test est cohérent mais perso pour ce genre de truc je préfères poser un flag (ca évite justement ces problèmes de fork -duplication de process en gros-, qui provoque effectivement des retours pas toujours glorieux, sans compter qu'en chaînant un max avec les pipes...) .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    pid=`echo $$ > /tmp/flag_tempo`;
     
    if [ -f /tmp/flag_tempo ]
     then 
      echo "Traitement déjà en cours sur ce serveur. Veuillez réessayer ultérieurement."
      exit -1
    else
      perl traitements_planifies.pl
      rm -f /tmp/flag_tempo 2>&1 > /dev/null
    fi
    Après, travailler en mémoire ou sur fichier pour un traitement lancer à heure précise ne pose pas de soucis particulier.
    Y a d'autres soluces plus élégantes mais bon

Discussions similaires

  1. Traitement en cours.
    Par Minigo dans le forum ASP.NET
    Réponses: 8
    Dernier message: 23/08/2007, 19h19
  2. Détecter un processus en cours
    Par calenfeaion dans le forum Général Python
    Réponses: 5
    Dernier message: 31/07/2007, 16h37
  3. Détecter un téléchargement en cours
    Par Dosseh dans le forum Programmation et administration système
    Réponses: 5
    Dernier message: 18/07/2007, 10h55
  4. Indicateur traitement en cours
    Par elendila dans le forum Access
    Réponses: 2
    Dernier message: 29/08/2006, 11h43
  5. Réponses: 8
    Dernier message: 25/11/2005, 18h38

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