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

Java Discussion :

Problème Runtime.exec et Samba


Sujet :

Java

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut Problème Runtime.exec et Samba
    Bonjour à tous,

    J'ai un -gros ? - problème avec un exec en Java (que j'ai pourtant déjà utilisé des dizaines de fois). Avant de poster ici j'ai cherché - sans succès - sur la toile grâce à mon grand ami (Google).

    Tout d'abord mon installation :
    - Un PC windows, sur le disque un exécutable Linux (ELF).
    - Un PC Linux sur lequel est monté l'arborescence contenant le ELF ci-dessus grâce à Samba.

    Mon problème (sur le PC linux) :
    - Dans la console, j'exécute mon ELF => pas de problème
    - Dans Eclipse je lance mon appli :
    - Détection de l'existence du fichier => pas de problème
    - Exécution du ELF par Runtime.exec => java.io.IOException: <monexecutable> : not found

    Ma commande pour monter le répertoire : mount -t cifs <répertoirewindows> <point de montage> -o defaults,user=<nomutilisateur>
    J'ai pensé que cela venait surement de Samba, j'ai donc bidouillé toute la matinée les paramètres du mount, rien n'y a fait.
    J'ai essayé avec les options suivantes :
    - defaults
    - rw
    - defaults,exec
    - defaults,exec,noperm

    Si quelqu'un connait le problème ... Merci d'avance !
    Si il faut plus de détails, me demander ...

    P.S. ma config :
    Java 5 (non négociable malheureusement)
    Eclipse Helios
    Linux Debian lenny (non négociable aussi)
    Samba 3.2.5
    Windows XP Pro

  2. #2
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,


    On pourrait voir le code exact du Runtime, et la ligne de commande correspondante sous le shell ?


    a++

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    Bonjour,

    alors le code que j'utilise pour lancer l’exécutable dans java :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
    	Process p = Runtime.getRuntime().
    			exec("./../../../perfo-common-engine/ls-engine-lib/<nomexécutable>");
    	p.destroy();
    } catch (Exception e1) {
    	throw new MandatoryException(
    			ERR_FILE_MSG_EXEC.replace(KEY_MISSING, currentName), 
    			currentName, 
    			MandatoryException.EXEC);
    }
    ça me retourne l'exception.

    Si je me positionne (en mode console) dans le répertoire depuis lequel se lance l'appli Java et que j'exécute la commande ./../../../perfo-common-engine/ls-engine-lib/<nomexécutable>, tout va bien (un fichier LOG est créé).

    Si je déplace l'exécutable hors de l'arborescence montée avec SAMBA (pour l'exemple, à la racine) et que je relance le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try {
    	Process p = Runtime.getRuntime().
    			exec("/<nomexécutable>");
    	p.destroy();
    } catch (Exception e1) {
    	throw new MandatoryException(
    			ERR_FILE_MSG_EXEC.replace(KEY_MISSING, currentName), 
    			currentName, 
    			MandatoryException.EXEC);
    }
    tout va bien, le fichier LOG est créé ...

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Essayes déjà d'utiliser le chemin complet vers le programme (pour être sûr).


    Le p.destroy() c'est juste pour les tests j'espère ? Il faut traiter les flux et attendre la fin du process...

    Et tant qu'à faire il serait préférable d'opter pour ProcessBuilder à la place de Runtime.exec()


    a++

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    J'ai déjà essayé d'utiliser le chemin complet ainsi que passer par un ProcessBuilder => même résultat ...

    Pour ce qui est du p.destroy() oui, il est uniquement pour les tests (mais il n'arrive pas jusque là il crashe au exec()).

    Je cherche activement du coté de SAMBA et de CIFS mais je ne trouve rien et ne comprends vraiment pas d'où ça pourrait venir ...

    En tout cas, merci d'y consacrer un peu de ton temps !

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Y-a-t-il des caractères spéciaux dans le chemin ?

    Quel est l'exception complète ?

    Sinon essayes de lancer le programme via le shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    new ProcessBuilder("/bin/sh", "-c", "path/vers/le/programme")
    a++

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2012
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2012
    Messages : 5
    Par défaut
    Je n'avais pas du tout essayé de lancer le programme via le shell . Effectivement ça fonctionne ! Merci beaucoup pour ton aide !

    Un jour je chercherai pourquoi ce bug, c'est un comportement qui me surprend énormément quand même ...

    Les réponses à tes précédentes questions :
    Non, il n'y a aucun caractère spécial.

    L'exception complète :
    java.io.IOException: java.io.IOException: <nomexécutable>: not found
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
    at java.lang.ProcessImpl.start(ProcessImpl.java:65)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:451)
    at java.lang.Runtime.exec(Runtime.java:591)
    at java.lang.Runtime.exec(Runtime.java:429)
    at java.lang.Runtime.exec(Runtime.java:326)

    (je ne peux pas aller plus bas pour cause de confidentialité mais la ligne suivante est l'appel au Runtime.exec()).

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

Discussions similaires

  1. Problème de Runtime.exec()
    Par Shaina dans le forum Général Java
    Réponses: 4
    Dernier message: 02/11/2011, 17h10
  2. Problème de Runtime exec
    Par entudiant91 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 26/03/2011, 18h36
  3. runtime.exec shell problèmes d'espaces
    Par yoxos dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 05/10/2009, 18h16
  4. Problème avec Runtime.exec()
    Par Vince182 dans le forum Langage
    Réponses: 2
    Dernier message: 24/10/2007, 17h48
  5. Réponses: 15
    Dernier message: 21/02/2007, 17h29

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