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

Fermé
madeinloveyou Messages postés 61 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 22 avril 2010 - 3 juin 2009 à 09:33
madeinloveyou Messages postés 61 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 22 avril 2010 - 3 juin 2009 à 17:00
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 !!!!)

6 réponses

Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
3 juin 2009 à 10:33
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 61 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 22 avril 2010
3 juin 2009 à 10:53
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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
3 juin 2009 à 11:06
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 61 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 22 avril 2010
3 juin 2009 à 13:56
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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 1 329
3 juin 2009 à 14:29
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 61 Date d'inscription mercredi 6 mai 2009 Statut Membre Dernière intervention 22 avril 2010
3 juin 2009 à 17:00
OK ba g pas de '&' donc c bon ??
0