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

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs Discussion :

Command Linux sans retour


Sujet :

Plateformes (Java EE, Jakarta EE, Spring) et Serveurs

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut Command Linux sans retour
    Bonjour à tous,

    Je développe sous Jonas une IHM.
    j'aimerais depuis cette IHM interrogé un serveur distant et afficher les résultat.

    J'ai donc un command linx, avec un SSH, mais impossible de récupérer le retour de la commande, elle ne se termine jamais.
    Or sous la machine linus (sur laquelle tourne jonas) la command s'execute sans problème.
    Alors que dans mes log je ne passe même pas le 'waitFor'.

    Quelqu'un pourrais jeter un oeil sur mon code ?
    Merci d'avance :

    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
     
    command="ssh "+logUser+"@"+logHost+" 'find "+param+"' >>"+filename;
    Process p = Runtime.getRuntime().exec(command); 
    int tmp = p.waitFor();
    LogCti.info("[SEARCHBACKUP] Retour" :"+tmp);
     
    File backupFile = new File (filename);
    BufferedReader backupInput = new BufferedReader (new FileReader(backupFile));
    String line = null;
     
    while ((line = backupInput.readLine()) != null){
    	LogCti.info("[SEARCHBACKUP] line" :"+line);
    	lstDescripteurs.add(new ReferenceData(""+i,line));
    	}
    backupInput.close();

    encore merci...
    Matt22

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

    quels sont les paramètres que tu passes à find?

    Est-ce qu'il a qqch dans ton fichier réprensenté par la ta variable filename sur ton serveur?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 17
    Points : 11
    Points
    11
    Par défaut
    Salut,

    Merci pour ton aide... mais j'ai trouvé !

    En fait il faut absolument passé par des thread (voir code en dessous si ça interesse.)

    Mais maintenant j'ai un autre soucis, j'ai comme retour :
    ksh: find /exec/applis/csvsou/csvurs/logs/urs/* -cmin -600 -type f -print: not found.

    Alors que si je lance ma commande ssh à la main avec les find, je n'ai pas ce soucis !
    La première machine est un linux l'autre un unix !
    Quelqu'un aurait une idée ?


    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
     
    try { 
    //						creation du processus 
    					final Process p = Runtime.getRuntime().exec(cmdArray); 
    //					 Consommation de la sortie standard de l'application externe dans un Thread separe
    					new Thread() {
    						public void run() {
    							try {
    								BufferedReader reader = new BufferedReader(new InputStreamReader(p.getInputStream()));
    								String line = "";
    								int i=0;
    								try {
    									while((line = reader.readLine()) != null) {
    										LogCti.info("[SEARCHBACKUP] Ligne "+i+" :"+line);
    						                lstDescripteurs.add(new ReferenceData(""+i,line));
    						                i++;
    									}
    								} finally {
    									reader.close();
    								}
    							} catch(IOException ioe) {
    								ioe.printStackTrace();
    							}
    						}
    					}.start();
     
    //					 Consommation de la sortie d'erreur de l'application externe dans un Thread separe
    					new Thread() {
    						public void run() {
    							try {
    								BufferedReader reader = new BufferedReader(new InputStreamReader(p.getErrorStream()));
    								String line = "";
    								try {
    									while((line = reader.readLine()) != null) {
    										LogCti.info("[SEARCHBACKUP] Erreur :"+line);
    									}
    								} finally {
    									reader.close();
    								}
    							} catch(IOException ioe) {
    								ioe.printStackTrace();
    							}
    						}
    					}.start(); 					
     
    					p.waitFor();

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

    Peux-tu mettre le chemin complet de la commande find de ton serveur distant et voir ce que ça donne?

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Deux gros commentaires par rapport à ton code:

    1) exec n'est pas un shell. Aussi des commandes avec chainage ou redirection, qui sont des montages de commandes spécifiques au shell, ne sont pas prise en charge. Seules des applications peuvent etre lancées avec exec. Libre à toi de lancer un shell pour traiter ces cas là! Quelque chose dans ce gout là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Process p = Runtime.getRuntime().exec(new String[] {"/bin/bash",command});
    2) dans la pluspart des cas, tu dois traiter les flux d'entrée sortie du process démarré, sous peine de bloquer ce process quand ses buffers seront pleins! (Voir la FAQ pour plus de détails)

Discussions similaires

  1. [Dos] Lancer une commande dos sans attendre la fin
    Par MrEddy dans le forum Windows
    Réponses: 4
    Dernier message: 09/06/2005, 18h38
  2. Réponses: 1
    Dernier message: 30/04/2004, 12h36
  3. [Kylix] Interface graphique pour lognes de commande linux
    Par lecharcutierdelinux dans le forum EDI
    Réponses: 6
    Dernier message: 29/08/2003, 11h20
  4. Réponses: 2
    Dernier message: 24/06/2003, 21h31
  5. [Kylix] Commandes linux ss kylix
    Par csnickos dans le forum EDI
    Réponses: 3
    Dernier message: 15/09/2002, 21h24

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