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

Linux Discussion :

Script pour verifier si process tomcat est UP sur machine distante


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut Script pour verifier si process tomcat est UP sur machine distante
    Bonjour tout le forum. Je veux écrire un script que je peux exécuter à distance sur un post lunux pour vérifier si le process tomcat est up. ce script doit me renvoyer un entier 0 pour vrai ou autre pour faux.

    Pour le faire, j'aborde le probleme de la facon suivante :

    je fais un ps pour lister les process et je le pipe sur un grep du port sur lequel est sensé tourné (mon tomccat). car il y a plusieurs process tomcat qui tourne simultanément sur la machine.

    #!/bin/bash

    ps -auxww | grep 8081

    je n'ai que le grep lui meme comme résultat et pas le process. Je ne sais pas non plus comment renvoyer ce résultat à la fin du script.

    PS: je suis novice en programmation script. Merci d'avance pour vos aide

  2. #2
    Expert confirmé 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
    Par défaut
    le plus simple et de faire un retour d'affichage dans une variable comme par exemple

    ne fais pas de script pour si peu sauf si ça devriendra un check récurrant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    coderetour=$(ssh ...... "/bin/ps -ef | /bin/grep truc > /dev/null ; echo $?") 
    if [ $coderetour -ne 0 ] ; then
     echo ca chie
    else
     echo ok
    fi
    code retour ne voit pas le resultat de ps qui est redirigé vers null
    mais $? sur la machine distante prend le retour 0 si c'est bon autre sinon

    il suffit ensuite au niveau local de voir ce qui a eté chargé dans coderetour
    ne = not equal

    exemple live :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [~]# t=$(ssh 172.19.0.50 "/bin/ps -ef | grep cat  > /dev/null ; echo $?")
    [~]# if [ $t -ne 0 ] ; then echo non ; else echo oui ; fi
    non
    [~]# t=$(ssh 172.19.0.50 "/bin/ps -ef | grep mysql  > /dev/null ; echo $?")
    [~]# if [ $t -ne 0 ] ; then echo non ; else echo oui ; fi
    oui
    [~]#
    ce qui veut donc dire que quelqu'un utilise mysql sur cette machine mais personne n'est en train de faire un cat au moment de la meusure.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Citation Envoyé par frp31 Voir le message
    le plus simple et de faire un retour d'affichage dans une variable comme par exemple

    ne fais pas de script pour si peu sauf si ça devriendra un check récurrant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    coderetour=$(ssh ...... "/bin/ps -ef | /bin/grep truc > /dev/null ; echo $?") 
    if [ $coderetour -ne 0 ] ; then
     echo ca chie
    else
     echo ok
    fi
    code retour ne voit pas le resultat de ps qui est redirigé vers null
    mais $? sur la machine distante prend le retour 0 si c'est bon autre sinon

    il suffit ensuite au niveau local de voir ce qui a eté chargé dans coderetour
    ne = not equal

    exemple live :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [~]# t=$(ssh 172.19.0.50 "/bin/ps -ef | grep cat  > /dev/null ; echo $?")
    [~]# if [ $t -ne 0 ] ; then echo non ; else echo oui ; fi
    non
    [~]# t=$(ssh 172.19.0.50 "/bin/ps -ef | grep mysql  > /dev/null ; echo $?")
    [~]# if [ $t -ne 0 ] ; then echo non ; else echo oui ; fi
    oui
    [~]#
    ce qui veut donc dire que quelqu'un utilise mysql sur cette machine mais personne n'est en train de faire un cat au moment de la meusure.
    Merci frp31 pour ta réponse tres claire. En réalité j'ai besoin d'un script car je développement une application de monitoring qui à intervalle régulier fait un test sur des process de différents poste et récupere le résultat. Dans la source j'avais déjà prévu que ces tests se fassent par l'exécution d'un script et résupération de la valeur de retour. Pire si je fais "grep" sur cat ca ne résoud pas le probleme car il peut avoir plusieurs process "cat" qui tourne sur le poste. c'est pour ca que je fais :pour avoir un maximum de détails et pouvoir faire un grep. Sinon le mien de tomcat pourrait etre down et je récupère un vrai car un autre tomcat tourne à ce moment là. Je suis juste sur du port sur lequel tourne le mien de tomcat.

  4. #4
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    exemple live :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    [~]# t=$(ssh 172.19.0.50 "/bin/ps -ef | grep cat  > /dev/null ; echo $?")
    [~]# if [ $t -ne 0 ] ; then echo non ; else echo oui ; fi
    non
    [~]# t=$(ssh 172.19.0.50 "/bin/ps -ef | grep mysql  > /dev/null ; echo $?")
    [~]# if [ $t -ne 0 ] ; then echo non ; else echo oui ; fi
    oui
    [~]#
    ce qui veut donc dire que quelqu'un utilise mysql sur cette machine mais personne n'est en train de faire un cat au moment de la meusure.
    Je viens d'essayer cette partie de ton code en live voila ce j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [~~]$ /bin/ps -ef | grep mysql  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep tititoutou  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep mysql  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep comcombre  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep cat  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep concombre
    user   26217 14951  0 13:39 pts/1    00:00:00 grep concombre
    Apparemment quelque soit la synthaxe, il considere le process "grep" lui meme comme un resultat valable

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    J'ai une autre idée mais j'ai besoin de votre aide. Sachant que quelques soit la synthaxe je récupere dans les résultat le grep, je veux faire un test de condition sur mon port voir si j'ai plus de deux résultats. Alors je fais à la place des étoiles, je veux mettre une regexp. cette regexp doit tester exclusivement le port "8081" et pas des choses comme : 80812 ou 18081 ni 1480813. Ce résultat je veux pouvoir le tester directement ou le stocker puis le tester voir s'il y en a plus de deux. Help car je ne suis pas non plus une lumiere en regexp. Merci d'avance pour vos aide

  6. #6
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Citation Envoyé par organza94 Voir le message
    J'ai une autre idée mais j'ai besoin de votre aide. Sachant que quelques soit la synthaxe je récupere dans les résultat le grep, je veux faire un test de condition sur mon port voir si j'ai plus de deux résultats. Alors je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re=$(ps -auxww |grep ****)
    à la place des étoiles, je veux mettre une regexp. cette regexp doit tester exclusivement le port "8081" et pas des choses comme : 80812 ou 18081 ni 1480813. Dans la variable "re", je veux pouvoir le tester directement s'il y en a plus de deux. Ce qui suppose que je prends en copte le process grep lui meme et un éventuel résultat coreect. Help car je ne suis pas non plus une lumiere en regexp. Merci d'avance pour vos aide
    Pour info mon OS : Linux Redhat 3 : x86_32

  7. #7
    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
    Par défaut
    Bonjour,

    Tu ne peux pas tester en local ce qui se passe sur une machine distante. C'est pour cela que la solution qui t'a été proposée utilise ssh (Secured SHell), qui permet de se connecter à distance à une machine, et donc d'y exécuter une commande (dans ton cas ce sera un 'ps' avec les bonnes options).

    Attention : cela implique que la machine distante accepte les connexions distantes depuis le poste d'où tu souhiates interroger, et en plus que la configuration de ssh ait été faite pour que le mot de passe ne soit pas demandé.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  8. #8
    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
    Par défaut
    Bonjour,

    Citation Envoyé par organza94 Voir le message
    Cette regexp doit tester exclusivement le port "8081" et pas des choses comme : 80812 ou 18081 ni 1480813.
    grep permet effectivement de travailler sur des expressions régulières. Encore faut-il être capable de représenter ce que tu souhaites par une regexp, ce qui demande un peu de travail préalable, afin d'identifier de manière formelle ce que tu souhaites avoir comme expression.

    Ici, on pourrait dire que ce que tu cherches est :
    1. la chaine 8081 avec forcément un espace avant ou après
    2. la chaine 8081 sans chiffre ni avant ni après
    3. la chaine 8081 sans chiffre ni lettre avant ou après
    4. ...


    Mettons que ce soit le cas 2 (le plus probable à mon sens). maintenant qu'il est clairement identifié, il est possible de le traduire en expression régulière :

    egrep "[^0-9]8081[^0-9]" mon_fichier

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ cat test.txt
    coucou 8081 coucou
    test 80812 test
    test2 18081 test23
    essai 180812 essai
    coucou2
    $ egrep "[^0-9]8081[^0-9]" test.txt
    coucou 8081 coucou
    PS : si tu n'as pas egrep sur ta machine, utilises "grep -e"
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  9. #9
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    Bonjour,



    grep permet effectivement de travailler sur des expressions régulières. Encore faut-il être capable de représenter ce que tu souhaites par une regexp, ce qui demande un peu de travail préalable, afin d'identifier de manière formelle ce que tu souhaites avoir comme expression.

    Ici, on pourrait dire que ce que tu cherches est :
    1. la chaine 8081 avec forcément un espace avant ou après
    2. la chaine 8081 sans chiffre ni avant ni après
    3. la chaine 8081 sans chiffre ni lettre avant ou après
    4. ...


    Mettons que ce soit le cas 2 (le plus probable à mon sens). maintenant qu'il est clairement identifié, il est possible de le traduire en expression régulière :

    egrep "[^0-9]8081[^0-9]" mon_fichier

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $ cat test.txt
    coucou 8081 coucou
    test 80812 test
    test2 18081 test23
    essai 180812 essai
    coucou2
    $ egrep "[^0-9]8081[^0-9]" test.txt
    coucou 8081 coucou
    PS : si tu n'as pas egrep sur ta machine, utilises "grep -e"
    Désolé je n'avais pas vu ton deuxième post. J'étais dejà en train de répondre au premier quand il a du être chargé. En fait je reconnait mon process tomcat car le port lui est passé en argument au lancement. Donc en faisant un ps on trouve tous les tomcats avec pour chacun son port. Et le grep me permet bien de récuper ce qui m'interesse vraiment dans ma variable. Je n'ai plus qu'à compter le nombre de ligne contenu dans cette variable et fait un test sur ce resultat pour savoir quelle valeur renvoyer. Je vous tiens au courant de l'avancement

  10. #10
    Expert confirmé 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
    Par défaut
    Citation Envoyé par organza94 Voir le message
    Je viens d'essayer cette partie de ton code en live voila ce j'ai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    [~~]$ /bin/ps -ef | grep mysql  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep tititoutou  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep mysql  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep comcombre  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep cat  > /dev/null ; echo $?
    0
    [~~]$ /bin/ps -ef | grep concombre
    user   26217 14951  0 13:39 pts/1    00:00:00 grep concombre
    Apparemment quelque soit la synthaxe, il considere le process "grep" lui meme comme un resultat valable
    forcément tu le check en local et c'est pas la sortie du ssh que tu testes

  11. #11
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 37
    Par défaut
    Citation Envoyé par frp31 Voir le message
    forcément tu le check en local et c'est pas la sortie du ssh que tu testes
    Toute mes excuses je suis débutant donc j'apprends un peu sur le tas et en fonction des difficultés aux quelles je me retrouve confronter. Merci pour tes réponses et explications. J'ai appris quelque chose en plus. Mais pour mon projet je suis obligé de passer par un script.

  12. #12
    Expert confirmé 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
    Par défaut
    Citation Envoyé par organza94 Voir le message
    Toute mes excuses je suis débutant donc j'apprends un peu sur le tas et en fonction des difficultés aux quelles je me retrouve confronter. Merci pour tes réponses et explications. J'ai appris quelque chose en plus. Mais pour mon projet je suis obligé de passer par un script.
    encore un peu de patience et tu va devenir un geek linux

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

Discussions similaires

  1. [Débutant] afficher et tuer des process sur machine distante
    Par niakou dans le forum Windows Forms
    Réponses: 6
    Dernier message: 09/04/2014, 14h51
  2. Lancement Script sur machine distante Windows
    Par michelS dans le forum Exécution et industrialisation
    Réponses: 3
    Dernier message: 09/01/2014, 17h20
  3. Injection de dépendance pour un EJB3 situé sur machine distante
    Par clem_alain dans le forum Wildfly/JBoss
    Réponses: 2
    Dernier message: 15/01/2011, 10h33
  4. [KSH] Script pour stopper un process
    Par shanod dans le forum Unix
    Réponses: 7
    Dernier message: 02/11/2009, 10h31
  5. exécuter script/bach/commande sur machine distante
    Par bossun dans le forum VBScript
    Réponses: 1
    Dernier message: 20/01/2009, 18h24

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