J'ai un script (script KSH pour être précis) qui télécharge 3 fichiers à partir d'un serveur FTP, en utilisant la commande curl
.Comportement étrange lors de l'exécution d'un script bash à partir du programme Java
Lorsque j'exécute manuellement mon script, c'est-à-dire en exécutant la commande ./ftp_download.sh XXX
(XXX sont les paramètres du script), le téléchargement se termine correctement.
Comme je veux exécuter le script à partir d'un programme Java, j'ai fait une classe courte Java qui contient exactement que:
public class Run {
private static final String CMD = "/.../sh/ftp_download.sh XXX";
public static void main(String[] args) {
System.out.println("========================================================");
BufferedReader out = null;
try {
long startTime = System.currentTimeMillis();
String strOutputline;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date now = new Date();
Process processus = Runtime.getRuntime().exec(CMD);
out = new BufferedReader(new InputStreamReader(processus.getInputStream()));
while ((strOutputline = out.readLine()) != null) {
now.setTime(System.currentTimeMillis());
System.out.println(sdf.format(now) + " " + strOutputline);
}
System.out.println("RESULT : " + processus.waitFor());
out.close();
processus.destroy();
long duration = System.currentTimeMillis() - startTime;
System.out.println("Duration : " + duration);
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (out != null) {
out.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
System.out.println("========================================================");
System.out.println("END");
}
}
Cependant, quand je lance ce programme simple, il gèle tout simplement après exactement 3m20 (Cette durée est toujours la même, même si j'exécute le programme Java plusieurs fois). par le gel, je veux dire que le programme Java est toujours en cours (le processus curl
trop), mais le fichier téléchargé ne se développe pas plus (c.-à-curl
ne continue pas à télécharger les données) ...
Ainsi, je ne me la ligne RESULT: xxx
imprimé dans la console ...
Qu'est-ce qui peut expliquer ce comportement étrange? Ps: Dans un proche avenir, je vais changer mon projet afin de télécharger ces fichiers en utilisant la bibliothèque Apache commons-net, mais je veux vraiment comprendre ce comportement étrange!
Merci à derobert, je parviens enfin à résoudre ce problème. Quelques explications: en mode normal, curl
affiche une information de progression (un tableau avec la quantité de données téléchargées, le temps restant, etc.). Après un certain temps, le tampon semble être complètement rempli, et c'est pourquoi le processus se fige ...
Vous pouvez essayer strace sur le processus Java et voir où son attente/pendaison. – vpram86
Mec, exécutant script bash à partir d'un programme Java * IS * un comportement étrange :) Désolé, n'a pas pu résister ... –