Attendre fin d'execut° d'1 cmd sur serveur !
madeinloveyou
Messages postés
71
Statut
Membre
-
madeinloveyou Messages postés 71 Statut Membre -
madeinloveyou Messages postés 71 Statut Membre -
Bonjour,
Je travail sur java sous Eclipse. J'utilise la librairie Trilead SSH-2 for Java
pour me connecter, exécuter mes scripts, ...
J'execute des scripts sur un serveur, le problème est que c'est scripts peuvent durer assez
longtemps ... mon programme lui n'attend pas la fin de l'exécution de la commande "./script.sh"
pour executer le second script !!! aye !!! Donc je souhaiterai savoir si quelqu'un connait un
moyen d'attendre le fin de l'exécution du script ?
De plus, je n'arrive toujours pas à récupérer les données renvoyé par le script !!!
Aidez moi s'il vous plaît
Merci d'avance
(Ca Urgeeeeeeeee !!!!)
--
Connaître les autres, c’est sagesse. Se connaître soi-même, c’est sagesse supérieure.
Imposer sa volonté aux autres, c’est force. Se l’imposer à soi-même, c’est force supérieure.
Je travail sur java sous Eclipse. J'utilise la librairie Trilead SSH-2 for Java
pour me connecter, exécuter mes scripts, ...
J'execute des scripts sur un serveur, le problème est que c'est scripts peuvent durer assez
longtemps ... mon programme lui n'attend pas la fin de l'exécution de la commande "./script.sh"
pour executer le second script !!! aye !!! Donc je souhaiterai savoir si quelqu'un connait un
moyen d'attendre le fin de l'exécution du script ?
De plus, je n'arrive toujours pas à récupérer les données renvoyé par le script !!!
Aidez moi s'il vous plaît
Merci d'avance
(Ca Urgeeeeeeeee !!!!)
--
Connaître les autres, c’est sagesse. Se connaître soi-même, c’est sagesse supérieure.
Imposer sa volonté aux autres, c’est force. Se l’imposer à soi-même, c’est force supérieure.
6 réponses
-
je ne comprends pas.
si tu met "./script.sh" le shell courant devrait attendre que le script se termine.
le lance tu bien sans le '&' à la fin ?
place un "echo FIN" à la fin de script.sh pour être sur qu'il n'est pas terminé.
Si ça se trouve ton script exécute une tâche en arrière plan, et c'est elle qui n'est pas terminé.
Comment lance tu la commande ssh ? si ça se trouve le problème peut venir de là.
Par exmple, pour exécuter des script, j'utilise ssh -t -
Je me connecte par ssh de cette façon :
try { conn = new Connection("serveur"); conn.connect(); @SuppressWarnings("unused") boolean isAuthenticated = conn.authenticateWithPassword ("login", "pass"); } catch(IOException except) { JOptionPane.showMessageDialog(null, except.getMessage(), "Error", JOptionPane.ERROR_MESSAGE); }
voici comment j'execute mes scripts :// j'appel unne classe que j'ai créer => CommandeExterne arg[0] = ("cd /projet/tours/jlgatti/ | megablast -i Input/"+ ficInput+" -d "+chemindb+" -D3 -p "+percent+ " -o Output/"+ficOutput); cmdExt.Execute(arg,true,false);
voici l'essentiel de la classe :public void Execute (String []command, boolean connex, boolean R) { Process p = null; InputStream is = null; try { if(connex){ // si le script s'execute sur le serveur ! session = connection.openSession(); session.execCommand(command[0]); s = session.getStdout(); if(session.getStdout().equals(null)) is = session.getStderr(); } else { ... ... ... } is = p.getInputStream(); } if(R){ // s'il y a un résultat afficher par le script ! InputStreamReader isr = new InputStreamReader(is); FileOutputStream fos = new FileOutputStream("results"); OutputStreamWriter w = new OutputStreamWriter(fos); BufferedReader br = new BufferedReader(isr); String line = null; line = br.readLine(); try { while (line != null){ if (line != null && !line.equals(" ") & !line.equals("\n")){ res[i] = line; w.write(line); w.write("\n"); i++; } line = br.readLine(); } w.close();
Voilà tous ce qu'il faut savoir !!
mon probleme c qu'il n'y a rien dans le Line
alors qu'à la main mon script renvoie bien un nombre ??? -
désolé, je ne comprend pas trop ton programme.
Je trouve bizarre le tunnel entre cd et megablast...
Regarde si tu n'as pas des options de connexion qui pourrait te servir. -
Que veut tu dire par : le lance tu bien sans le '&' à la fin ?
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
il y a sur sh deux mode d'exécution : direct et en tâche de fond. En tâche de fond, tu exécute en parallèle un nouveau shell qui lira ton script (de manière concurrente). pour faire ça, il faut mettre un '&' à la fin de la ligne de commande. C'est tout.
-