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

API standards et tierces Java Discussion :

[Système]Execution d'une commande shell


Sujet :

API standards et tierces Java

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut [Système]Execution d'une commande shell
    Bonjour,
    J'ai besoin d'executer une commande shell depuis une jsp.
    Cela doit arréter et démarrer un serveur LDAP.
    Ca fonctionne sous windows, mais sous unix, l'execution demarre a priori mais n'arrive pas a stopper ou demarrer le serveur.
    Quelqu'un a t'il une idee?

    voici mon petit bout de code pour l'unix
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Process proc1 = Runtime.getRuntime().exec("/bin/sh /..../stop-slapd");
    proc1.waitFor();

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Regarde au niveau de ta méthode exec, il y a une syntaxe particulière lorsqu'il y a des arguments à fournir.

    La méthode exec avec un seul paramètre correspond à l'execution d'une seule tache.

    De plus, si il s'agit d'un script sh, je ne pense pas que tu puisses l'executer aussi simplement : il faudra lancer l'interpreteur de commande, qui lui se chargera d'executer ton script.
    K

  3. #3
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    Le programme s'execute puisque j'ai un code retour du programme.
    Donc je ne sais pas trop quoi faire.
    Peut etre un probleme de droit?

  4. #4
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Ben oui tu executes sh, mais les paramètres ne sont pas passés..
    Et je ne suis même pas sûr que ce soit sh qui te retourne le code, mais peut-être l'environnement.
    K

  5. #5
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    quand jexecute directement "/.../stop-slapd" cela me donne la meme chose.
    je ne suis, pas sur que cela vienne de la, mais je regarde aussi en ce sens.

  6. #6
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Il va peut-être falloir que tu utilises l'option "-c" de SH.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    /bin/sh -c "une commande"
    Et pour que ça marche avec exec de java, il faudra que tu lui passes plusieurs paramètres, un avec "/bin/sh" et l'autre avec les paramètres, il faut regarder la doc pour la syntaxe
    K

  7. #7
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    le "-c" j'ai essaye sans succes, avec un tableau de commandes en parametre de l'exec.
    Je ne vois vraiment pas.Si quelqu'un a eu le meme pb...

  8. #8
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    As-tu passé les paramètres de cette manière?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
        String[] cmd = { "/bin/sh", 
                                 "-c",
                                 "une commande"
                              };
    Bien le bonjour chez vous
    Jowo

  9. #9
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    oui c'est exactement ce que j'ai fait

  10. #10
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    Cela ne fonctionne toujours pas

  11. #11
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    /bin/sh possède les bons droits ?

    De plus, quand tu dis que ça ne marche pas, ça fait quoi exactement ? Une erreur ? Un code retour correcte ?

    Avec un ls -la, ça donne quoi ?
    K

  12. #12
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    le ls -la fonctionne a priori, j'ai un le process.waitFor() à 0.

    String[] cmd = {"/bin/sh", "-c", "/.../stop-slapd"}; //ne fonctionne pas
    String[] cmd = {"ls", "-la"}; //fonctionne

    ...

  13. #13
    Membre chevronné
    Homme Profil pro
    Dév. Java & C#
    Inscrit en
    Octobre 2002
    Messages
    1 413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Dév. Java & C#
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 413
    Points : 1 993
    Points
    1 993
    Par défaut
    Le processus, je suppose Tomcat, qui éxecute ta page JSP a-t-il comme utilisateur le droit d'éxecuter la commande '"/.../stop-slapd'?
    Bien le bonjour chez vous
    Jowo

  14. #14
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Petite question en passant, j'avais cru que tu avais fait une faute d'orthographe au départ, mais j'ai du mal à saisir la signification de /.../ dans ta commande ? C'est pour pas qu'on voit le nom du repertoire ?

    Ton script stop-slapd n'attend aucune commande à son tour ? par exemple : "stop-slapd stop" ?

    Avec ton ls -la qui "marche", tu peux aussi obtenir le resultat en exploitant le buffer du process, essaie déjà de faire un print du résultat, car si ça se trouve il ne marche pas mieux
    K

  15. #15
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    l /.../ est bien pour cacher le rep et le stop n'attend pas de param.
    Je vais essayer le buffer, mais je pense que ca marche.
    Pour ce qui est des droits de tomcat, c'est peut etre ca mais comment faire alors?

  16. #16
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    le ls -la fonctionne tres bien je recois les infos.
    ...

  17. #17
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    En fait, la commande se lance mais le programme recherche un fichier qu'il ne trouve pas, alors que a la main ca fonctionne (en root).

  18. #18
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Comment as-tu fait cette déduction ? As-tu un message d'erreur ?

    il se peut donc que le dossier "/..../" ne soit pas accessible par ton processus Java, je ne sais pas comment sont gérés les droits sur ta machine, mais il faudrait qu'il puisse y accéder, pour vérifier, tu peux grace à ton ls -la vérifier les droits sur ce repertoire.
    K

  19. #19
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    139
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 139
    Points : 40
    Points
    40
    Par défaut
    J'affiche un message d'erreur du fichier stop-slapd qui dit qu'il ne trouve pas un fichier (pid), quand je regarde le shell, ce message est présent (***).
    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
    PIDFILE=/usr/sun/directoryServer/slapd-c-fokker-demo-model/logs/pid
    PIDRECOVERFILE=$PIDFILE.recover
    PIDSTARTINGFILE=$PIDFILE.starting
    if [ -f $PIDFILE ]
    then
      PID=`cat $PIDFILE 2> /dev/null`
    else 
      if [ -f $PIDRECOVERFILE ]
      then
        PID=`cat $PIDRECOVERFILE 2> /dev/null`
      else
        if [ -f $PIDSTARTINGFILE ]
        then
          PID=`cat $PIDSTARTINGFILE 2> /dev/null`
        else
          echo No ns-slapd PID file found. Server is probably not running(***)
          exit 2
        fi
      fi
    fi

    alors qu'il existe puisque j'arrive a lancer ma commande en root.

  20. #20
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Il faut que ton processus ait les droits sur "/usr/sun/directoryServer/slapd-c-fokker-demo-model/logs/pid" je pense !
    K

Discussions similaires

  1. [C] code pour executer une commande shell
    Par waldoun dans le forum Linux
    Réponses: 3
    Dernier message: 05/05/2007, 22h41
  2. [Système] Execution d'une commande avec php
    Par djspank dans le forum Langage
    Réponses: 1
    Dernier message: 14/03/2007, 08h47
  3. execute une commande shell en java
    Par freakfm dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 07/10/2006, 17h03
  4. Execution d'une commande Shell Unix
    Par boubakary dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 17/06/2006, 20h36

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