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

Administration système Discussion :

Script + Cron - Comment eviter les lancements multiples


Sujet :

Administration système

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Script + Cron - Comment eviter les lancements multiples
    Bonjour,

    Je lance des taches de fond via CRON mais certaines d'entre elles prennent du temps à s"executer et il est possible que le CRON relance la même tache alors que la première instance n'est pas encore finie ce que je souhaiterais éviter.

    Je souhaiterais donc que le script teste si il y a déjà une instance du même script lancée avant de faire les traitements.

    J'avais pensé un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if [ "$(ps -ef|grep nom_du_script|grep -v grep)" != "" ];then
    echo "Une intance de nom_du_script est dejà en cours ..."
    exit
    fi

    Mais bien évidemment ça, ne marche pas car le script est lancé au moment ou je fais le test.

    Connaissez vous un moyen de faire cela proprement ?

    Merci de votre aide.

    Jean

  2. #2
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    la solution est en fait simple, mais il faut le savoir,

    il suffit que le script crée au début un marqueur, /var/run/$0.pid
    et qu'il le detruise en fin d'exécution.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    #!/bin/sh
    if [ -f /var/run/$0.pid ] ; then
       echo "Une autre occurence tourne" >> /var/log/$0.log
       exit 1
    fi
    touch /var/run/$0.pid
    if [ $? -ne 0 ] ; then
       echo "impossible de cree le fichier /var/run/$0.pid" >> /var/log/$0.log
       exit 2
    fi
     
    #[...] ton code
     
     
    #fin de script :
    rm -f /var/run.$0.pid
    exit 0

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Bien sûr !! C'est tellement simple quand on y pense.

    Merci beaucoup pour le coup de main.

    Jean

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Le probleme du fichier temporaire, c'est que si le script plante, il ne sera plus jamais relance.

    La seule solution permettant de relancer le script meme en cas de plantage est que le script cree une socket sur un port donne. Mais c'est plus complexe a mettre en oeuvre.

  5. #5
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    oui mais là pour l'usager "normal", ça devient l'usine

  6. #6
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 49
    Points
    49
    Par défaut
    On ne peut pas simplement vérifier dans un ps aux que le script n'est pas lancé ? Je trouve ça carrément plus simple et plus safe.

  7. #7
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par delovan Voir le message
    On ne peut pas simplement vérifier dans un ps aux que le script n'est pas lancé ? Je trouve ça carrément plus simple et plus safe.
    non parce qu'un processus 'fou' peut être présent alors qu'il tourne plus dans la liste présentée par ps, donc c'est préférable d'avoir un marqueur "hors" activité donc un fichier ou un socket.

  8. #8
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 49
    Points
    49
    Par défaut
    Citation Envoyé par frp31 Voir le message
    non parce qu'un processus 'fou' peut être présent alors qu'il tourne plus dans la liste présentée par ps
    Comment se fait-ce ?

  9. #9
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Citation Envoyé par delovan Voir le message
    On ne peut pas simplement vérifier dans un ps aux que le script n'est pas lancé ? Je trouve ça carrément plus simple et plus safe.
    C'est le cas, par exemple, des processus zombies : ils ont fini d'etre executes, mais sont toujours presents.

  10. #10
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    Citation Envoyé par delovan Voir le message
    Comment se fait-ce ?
    par ce qu'il y a des tas de statuts à un processus et il peut devenir un "zombie" par exemple, le processus apparaît donc dans ps puisqu'il a un statut "accepté" par le système.
    C'est tout à fait logique puisque c'est un moyen de contrôle et de maitrise d'erreurs.

  11. #11
    Membre du Club
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Points : 49
    Points
    49
    Par défaut
    De mémoire, un process zombie est affiché avec un tag [defunct]. Il est donc facile de le repérer, et de le tuer, non ?

  12. #12
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 262
    Points
    12 262
    Par défaut
    par exemple oui mais comme tu viens de le dire toi même il apparaît bien donc se fier au "ps" n'est pas bon. ( ça n'a rien de politique hein )

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/09/2006, 11h49
  2. Comment eviter les doubons dans une requête?
    Par jyms2006 dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 08/03/2006, 15h08
  3. [TP] Lecture de nombres : comment éviter les plantages ?
    Par le-an dans le forum Turbo Pascal
    Réponses: 3
    Dernier message: 20/11/2005, 15h54
  4. Réponses: 10
    Dernier message: 26/08/2005, 09h17
  5. [C#] Comment eviter les boucles infinies ?
    Par Thomas Lebrun dans le forum C#
    Réponses: 12
    Dernier message: 09/06/2004, 01h04

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