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

Shell et commandes GNU Discussion :

Récupérer le pid d'un service Linux.


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut Récupérer le pid d'un service Linux.
    Bonjour,

    Imaginons que j'ai trois tomcat sur une machine. Chacun a son service associé : tomcat, tomcat2, tomcat3.

    Je dois automatiser l'arrêt de ces services via un script shell.

    Donc je lance la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo service tomcat stop
    Quand je veux vérifier si mon service est bien arrêté, je lance la commande
    Cette commande me retourne bien le fait que mon processus lié à ce tomcat est bien arrêté mais malheureusement il me renvoie également les processus liés à tomcat2 et à tomcat3.

    Ma condition d'arrêt de mon script est de ne plus avoir de processus lié au service arrêté.
    Actuellement, mon script arrête bien le service mais considère que le service n'est pas arrêté et donc boucle indéfiniment.

    Ma question est donc la suivante : comment récupérer de manière générale (et pas uniquement centrer sur tomcat, même si j'avouerai que c'est un bon début) le PID d'un service.

    De cette façon, ma condition d'arrêt sera que le process est bien mort.

    D'avance, merci beaucoup !
    Gabydebur

  2. #2
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    le principe normalement c'est de prendre exemple sur les initscripts classiques, à savoir que lors du start on stocke le pid du service dans un fichier quelque part dans /var/run/machin.pid, ce qui ensuite rend l'opération bien plus simple pour sélectionner celui que l'on souhaite stop/restart/status/etc.

    sous les environnement Debian-like et de mémoire l'exécutable start-stop-service dispose d'une option pour spécifier le fichier pid
    sinon de manière plus classique en shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    myservice &              # on execute en arrière plan
    echo $! > myservice.pid  # on écrit le pid du dernier processus lancé dans le fichier pid

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut
    Merci pour cette réponse !
    Je vais mettre en place les pid dans les fichiers comme mentionné, ca devrait fonctionner !

    Encore merci et bye !

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut
    Bonjour,

    Je rouvre cette discussion car au final j'ai du mal à faire fonctionner le système avec les fichier pid.

    J'ai cela dans mon fichier /etc/init.d/tomcat :

    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
    18
    19
    20
    21
    22
    pidfile=/var/run/tomcat.pid
    # Source function library.
    . /etc/init.d/functions
     
    # Loading the configuration parameters.
    if [ -f /etc/sysconfig/tomcat ]; then
      . /etc/sysconfig/tomcat
    fi
     
    RETVAL=0
     
    case "$1" in
     start)
            if [ -f $CATALINA_HOME/bin/startup.sh ];
              then
                logger -s "Starting Tomcat"
                /bin/su -l tomcat -c $CATALINA_HOME/bin/startup.sh & 
                echo $! > $pidfile
    	    RETVAL=$?
                [ $RETVAL = 0 ] && touch /var/lock/subsys/tomcat
            fi
            ;;
    Déjà quand j'ai ajouté la ligne de commande, je dois faire un CTRL + C pour arrêter le service quand je lance le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sudo service tomcat start
    Et le pid fourni n'est pas du tout le bon quand je regarde à l'intérieur.
    Quand je vais voir mes processus, il est marqué un nombre dans le fichier qui n'est pas un processus de plus.

    Mon OS est un centos 6.6

    Qu'est ce qui cloche dans mon code ?

    Merci d'avance !

  5. #5
    Expert confirmé Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 041
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    ton startup.sh est un script, ce n'est pas le service que tu veux lancer, ton service c'est un binaire (probablement lancé par startup.sh justement)
    et le pid que tu récupères selon toute vraisemblance c'est celui de l'invocation de /bin/su

    vu d'ici pour faire un initscript correct il faudrait aller fouiller le contenu du script startup.sh, à la fin ce qu'on daemonise c'est soit le binaire ELF tomcat soit le binaire ELF java avec en argument de quoi lancer tomcat en gros

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Août 2016
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2016
    Messages : 25
    Par défaut
    Hello,

    Merci pour la réponse !
    Effectivement, il y avait un autre script qui se lançait derrière.
    Et une option à activer dans ce script pour la création du fichier pid !

    Encore une fois, Merci beaucoup !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Web Service][SOAP] Récupérer un tableau d%u2019un service web SOAP ?
    Par lehic dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 04/05/2012, 02h37
  2. Réponses: 5
    Dernier message: 06/02/2008, 00h16
  3. Commande pour changer l'ordre de démarrage des services LINUX ?
    Par kabouns dans le forum Administration système
    Réponses: 4
    Dernier message: 07/12/2007, 09h43
  4. récupérer le PID du processus que l'on crée
    Par doukem dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 03/08/2007, 10h58
  5. lancer une commande et récupérer son pid en C
    Par klipper dans le forum Linux
    Réponses: 18
    Dernier message: 05/01/2007, 17h59

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