Attendre fin d'execut° d'1 cmd sur serveur !

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 !!!!)
A voir également:

6 réponses

Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
0
madeinloveyou Messages postés 71 Statut Membre
 
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 ???
0
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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.
0
madeinloveyou Messages postés 71 Statut Membre
 
Que veut tu dire par : le lance tu bien sans le '&' à la fin ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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.
0
madeinloveyou Messages postés 71 Statut Membre
 
OK ba g pas de '&' donc c bon ??
0