Diffrence entre commande en konsole et script.

Résolu
thierryR51 Messages postés 144 Statut Membre -  
thierryR51 Messages postés 144 Statut Membre -
Bonjour,

Je cherche à arrêter ou démarrer un server VNC.
Pour savoir si celui ci est démarrer voir pour le killer il me faut son pid.
En console
ps -ef | grep x11vnc | grep -v grep | awk '{ print $2 }'

Mais dans un script je n'ai pas le même résultat.
Pourquoi ?
Merci de toute aide.



--
Chercheur en améliorations.

[url]

8 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    Faudrait voir ton script pour te répondre, parce que chez moi le résultat est le même ;-\

    $ pgrep firefox
    3910

    $ echo -e "#! /bin/bash\npgrep firefox" > foo.sh && chmod +x foo.sh

    $ cat foo.sh
    #! /bin/bash
    pgrep firefox

    $ ./foo.sh
    3910

    0
  2. thierryR51 Messages postés 144 Statut Membre 8
     
    Voila ce que j'ai fait
    if [ -z $1 ];  #vrai si la chaine est vide 
    then
    auto= ps -ef | grep x11vnc | grep -v grep | awk '{ print $1 }'
    if [ -z $auto ]; #vrai si la chaine est vide
    then
    $cde= "start";
    else
    $cde= "stop";
    fi
    else
    cde=$1;
    fi

    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      auto= ps -ef | grep x11vnc | grep -v grep | awk '{ print $1 }'

      Pas étonnant que ça ne marche pas ;-((

      auto=$(ps -ef | grep x11vnc | grep -v grep | awk '{ print $1 }')

      Mais :
      auto=$(pgrep x11vnc)
      devrait être mieux ;-))
      0
  3. thierryR51 Messages postés 144 Statut Membre 8
     
    Effectivement ta commande est plus simple et apporte le même résultat. J'ai encore appris quelque chose. Voici ce que j'ai corrigé:
     if [ -z $1 ];  #vrai si la chaine est vide 
    then
    auto= $(pgrep x11vnc)
    if [ -z $auto ]; #vrai si la chaine est vide
    18 then
    19 cde= "start";
    20 else
    21 cde= "stop";
    fi
    else
    cde=$1;
    fi

    Et le résultat:
    + '[' -z ']'
    ++ pgrep x11vnc
    + auto=
    + '[' -z ']'
    + cde=
    + start
    x11vnc-server: ligne 19: start : commande introuvable


    Il semblerait que le mot "start" soit spécial ?
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il semblerait que le mot "start" soit spécial ?
      Ben c'est surtout que ce n'est pas une commande, mais une option (de la commande) qu'on passe soit à
      service
      soit à
      systemctl
      .

      Sur quel système es-tu ? Debian ou Mageia ?
      0
  4. thierryR51 Messages postés 144 Statut Membre 8
     
    Là je suis sous mageia donc systemctl
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Donc la commande (en root) est :
      systemctl start x11vnc-server
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. thierryR51 Messages postés 144 Statut Membre 8
     
    Ben pas tout à fait. Ce n'est pas un service:
     x11vnc -display :0


    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Oups je n'avais pas regardé ton code (le 2nd) en détail ;-\

      Pour déclarer une variable en shell bash, il ne faut pas d'espace autour du signe égale ;-(

      cde="start"
      0
  7. thierryR51 Messages postés 144 Statut Membre 8
     
    Bizarre, ça fonctionne en console mais pas sur le X
    Désolé, je te mets tout:
    #!/bin/sh

    set -x

    # le nom du service
    SERVICE_NAME=x11vnc
    # le répertoire où se trouvent les exécutables du service
    SERVICE_DIRECTORY=/usr/bin
    # le nom du script de démarrage du service
    SERVICE_STARTUP_SCRIPT="x11vnc -display :0"
    # le nom du script d'arrêt du service
    SERVICE_SHUTDOWN_SCRIPT="kill "

    if [ -z $1 ]; #vrai si la chaine est vide
    then
    pid=$(pgrep x11vnc);
    if [ -z $pid ]; #vrai si la chaine est vide
    then
    cde="start";
    else
    cde="stop";
    fi
    else
    cde=$1;
    fi

    usage()
    {
    echo "-----------------------"
    xmessage "

    Usage: $0
    (stop|start|restart)

    "
    echo "-----------------------"
    }

    service_start()
    {
    xmessage "Starting service '

    ${SERVICE_NAME}'... "
    OWD=`pwd`
    cd ${SERVICE_DIRECTORY} ./;
    ${SERVICE_STARTUP_SCRIPT}
    cd $OWD
    echo "Service '${SERVICE_NAME}' started successfully"
    }

    service_stop()
    {
    xmessage "Stopping service '
    ${SERVICE_NAME}'... "
    OWD=`pwd`
    cd ${SERVICE_DIRECTORY} ./
    ${SERVICE_SHUTDOWN_SCRIPT}' '$auto
    cd $OWD
    echo "Service '${SERVICE_NAME}' stopped"
    }

    case $cde in
    stop)
    service_stop
    ;;
    start)
    service_start
    ;;
    restart)
    service_stop
    service_start
    ;;
    • ) usageesacexit 0

    Dis moi ce que tu en penses. Merci.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      *)                usage
      esac
      exit 0

      Il manque les ";;" après usage ;-(
      0
  8. thierryR51 Messages postés 144 Statut Membre 8
     
    En console ça marche, mais si je clic directement sur le script en GUI le message de stop apparait systématiquement. Et si je recommance en console, tout va bien. Je ne peux pas cerner le problème..... Sans doute que le script ne s'exécutant pas dans la console bash, les variables déconnent ?
    0
  9. thierryR51 Messages postés 144 Statut Membre 8
     
    Ca y est j'ai trouvé:
    J'ai remplacé pgrep par pidof
    C'est super.

    Chercheur en améliorations.

    [url]
    0