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 :

script avec pidof pour tests services


Sujet :

Shell et commandes GNU

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut script avec pidof pour tests services
    Salutation !

    Je rencontre une erreur lors de l'execution de ce petit script :

    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
    #!/bin/bash
     
    # turn on debug mode
    set -x
     
    sshd='pidof sshd'
    smtpd='pidof snmpd'
     
    if [ -z $sshd ]
    then
     echo "sshd OK"
    else
     echo "sshd down"
    fi
     
    if [ -z $snmpd ]
    then
     echo "snmpd OK"
    else
     echo "snmpd down"
    fi
    c'est juste pour tester si les services sont lancés

    comment feriez vous ?

    merci d'avance

  2. #2
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Cela me semble plus court et plus clair :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    service='xterm bash smtpd ssh'
    for s in $service
    do
      if [  "S$(pidof $s)"  != "S" ]
      then
      echo $s OK
      else
      echo $s ne tourne pas 
      fi
    done

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    en effet, bien mieux merci

    c'est quoi ce "S" et "S$" ?

    comment on peut tester dans un if si la valeur d'une variable est null ou si elle a une valeur ?

  4. #4
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Pourquoi $S et S ? C'est juste une habitude que j'ai

  5. #5
    Invité
    Invité(e)
    Par défaut
    Salut,

    Ton erreur dans le script initial réside à ce niveau:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sshd='pidof sshd'
    smtpd='pidof snmpd'
    Tu utilises des single quotes '' au lieu des backquotes `` ou encore $().

    Les backquotes ou $() stockent le résultat d'execution d'une commande (pidof <deamon> dans ton cas) tandis que les single quotes stockent la chaine de caractères 'pidof <daemon>' dans ta variable.

  6. #6
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Bonjour,

    Si tu as le petit script /sbin/service dans ta distribution, le test des deux services devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    service sshd status
    service snmpd status
    et j'obtiens chez moi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    openssh-daemon (pid  1784) is running...
    snmpd is stopped

  7. #7
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Il est plus facile d'utiliser pidof que service à mon avis

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    oui je préfère pidof car si le service qui tourne n'as pas de script d'init il passera a trave

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    j'ai trouvé plus simple mais y a un petit bug

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    services='httpd xinetd snmpd sshd auditd master exim sendmail master vsftpd'
     
    for i in $services
    do
    if [ -z `pidof $i` ]
    then
     echo $i OFF
    else
     echo $i ON
    fi
    done
    a cause de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ++ pidof sshd
    + '[' -z 23950 23948 23411 23409 1540 ']'
    ./test1.sh: line 10: [: too many arguments

  10. #10
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if pidof $i >/dev/null; then echo "OK"; else echo "KO"; fi
    ...
    ?
    les sorties de pidof sont redirigées vers /dev/null, ne reste que le code de retour de la commande...
    s'il vaut 0 la condition est remplie
    s'il vaut 1 la condition échoue
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Membre émérite Avatar de jmelyn
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2007
    Messages
    703
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Septembre 2007
    Messages : 703
    Par défaut
    Vu le retour d'erreur, je pencherais plutôt pour un mauvais découpage de la ligne $service. Pourrais-tu ajouter la ligne IFS=" " avant la boucle for? Ce qui force l' "Input Field Separator" à "espace", c'est-à-dire le caractère qui sépare chaque pid dans la variable $services.

  12. #12
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 646
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 646
    Par défaut
    Bonjour jmelyn,

    pas nécessairement...

    vois :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ps -ef | grep sshd
    root      2390     1  0 Dec20 ?        00:00:00 /usr/sbin/sshd
    root     31451  2390  0 14:16 ?        00:00:00 sshd: nbah [priv]
    nbah     31453 31451  0 14:16 ?        00:00:00 sshd: nbah@pts/0 
    nbah     31484 31454  0 14:16 pts/0    00:00:00 grep --color=always sshd
    ...
    ?

    Quel paquet installer pour disposer de ce script service sur CentOS ?
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    Citation Envoyé par N_BaH Voir le message

    Quel paquet installer pour disposer de ce script service sur CentOS ?
    initscripts-8.45.19.1.EL-1

  14. #14
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    avec : IFS=" "
    ça ne change rien toujours la meme erreur

    je vais utiliser la forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if pidof $i >/dev/null; then echo "OK"; else echo "KO"; fi
    je ne savais pas que même après un >/dev/null on avait encore le retour de $?

  15. #15
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Par défaut
    Que de complication ....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if [ -z  "`pidof $i`" ]
    et le tour est joué

  16. #16
    Membre averti
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    65
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 65
    Par défaut
    merci a tous

    j'ai 4 solutions pour faire la même chose ça devrait aller

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

Discussions similaires

  1. script avec psexec netsh test ping
    Par rotordao dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 14/03/2013, 17h40
  2. Réponses: 1
    Dernier message: 30/05/2012, 20h47
  3. [WD16] Recherche Mini Appli Windev avec ODBC pour test
    Par pdemeure dans le forum WinDev
    Réponses: 6
    Dernier message: 17/11/2011, 11h28
  4. Réponses: 1
    Dernier message: 11/10/2007, 13h24
  5. [WD11] Copie d'analyse avec données pour test
    Par routmout dans le forum WinDev
    Réponses: 1
    Dernier message: 31/07/2007, 10h27

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