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

Langage Perl Discussion :

vérifier qu'un script n'est pas déja lancé


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut vérifier qu'un script n'est pas déja lancé
    salut,

    J'ai besoin d'aide sur un de mes scripts, j'aimerai vérifier que le script n'est pas déja lancé, je m'explique:

    je lance mon script de cette manière
    perl monscript.pl
    je voudrai que lorsque j' essai de le lancer une seconde fois de cette manière, interrompre le second script

    j'ai essayé via un ps x | grep monscript.pl et vérifier qu'il n'existe pas, d'un ça n'a pas fonctionné et de deux je trouve pas ça forcement jolie, mais si vous me dites que c'est l'unique solution ...

    à plus

  2. #2
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Généralement, on utilise un fichier "programme.lock" dans un emplacement bien choisi pour éviter ce problème. Au démarrage du script, l'existence du fichier est vérifié et le script s'arrête si le fichier existe déjà, sinon il le crée, et le supprime à la fin (ce qui peut exiger quelques précautions, au minimum donne un bon message d'erreur quand le script n'arrive pas à démarrer à cause d'un fichier lock, que l'utilisateur puisse le supprimer manuellement s'il y a eu un problème).

    --
    Jedaï

  3. #3
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    salut Jedai,

    ça fonctionne bien avec ta méthode, par contre j'aimerai savoir quel signal est envoyé lorsque je kill mon processus ?
    Vu qu'il faut que je supprime le fichier lock a chaque terminaison du programme, j'ai essayé avec sigkill mais ca ne doit pas être ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $SIG{KILL} = sub { unlink $ENV{PWD}."/godzilla.pid"; };

  4. #4
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Tu as aussi TERM qui est souvent utilisé plutôt que KILL, généralement pour forcer un arrêt moins drastique.

    --
    Jedaï

  5. #5
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    J'utilise déja TERM et ca ne fonctionne pas non plus, lorsque je kill le processus il n'efface pas le fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $SIG{INT}  = $SIG{TERM} = \&shutdown;
    $SIG{HUP}  = \&rehash;
    $SIG{KILL} = sub { unlink $ENV{PWD}."/godzilla.pid"; };
    dans le fonction shutdown j'essai aussi d'effacer le fichier.

  6. #6
    Membre éclairé
    Avatar de D[r]eadLock
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    504
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 504
    Points : 750
    Points
    750
    Par défaut
    Citation Envoyé par Ganondorf Voir le message
    J'utilise déja TERM et ca ne fonctionne pas non plus, lorsque je kill le processus il n'efface pas le fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $SIG{INT}  = $SIG{TERM} = \&shutdown;
    $SIG{HUP}  = \&rehash;
    $SIG{KILL} = sub { unlink $ENV{PWD}."/godzilla.pid"; };
    dans le fonction shutdown j'essai aussi d'effacer le fichier.
    Tu peux faire un strace de ton programe (strace perl ... ou juste strace -p PID) pour voir quel signal est reçu

  7. #7
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    salut,

    résultat du strace:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    serveur@Dirtybox:~/Godzilla$ strace -p 13351
    Process 13351 attached - interrupt to quit
    read(3, ":irc.dirty-system.net TIMESET 12"..., 4096) = 48
    read(3, ":irc.dirty-system.net PING uworl"..., 4096) = 52
    write(3, ":uworld.dirty-system.net PONG ir"..., 52) = 52
    read(3, ":irc.dirty-system.net TIMESET 12"..., 4096) = 48
    read(3, 0x83b36a8, 4096)                = ? ERESTARTSYS (To be restarted)
    +++ killed by SIGKILL +++
    Process 13351 detached
    je reçois bien un SIGKILL est pourtant il ne me supprime pas le fichier

  8. #8
    Membre régulier
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    244
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mars 2007
    Messages : 244
    Points : 99
    Points
    99
    Par défaut
    iop,

    j'ai trouvé mon "erreur", je tuai mon processus via kill -9 <pid>, un simple kill <pid> suffit et corrige mon probleme.

Discussions similaires

  1. Vérifier qu'un autre script n'est pas déjà exécuté
    Par olivier78960 dans le forum VBScript
    Réponses: 2
    Dernier message: 31/08/2010, 15h27
  2. Vérifier qu'une chaîne n'est PAS un nombre
    Par foxbond dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 06/03/2009, 08h21
  3. vérifier qu'un nombre n'est pas est paire
    Par mokless dans le forum Débuter
    Réponses: 5
    Dernier message: 15/11/2008, 21h16
  4. Comment vérifier si une structure n'est pas vide
    Par colorid dans le forum Langage
    Réponses: 7
    Dernier message: 09/09/2008, 00h01
  5. Réponses: 6
    Dernier message: 09/01/2008, 11h56

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