Не могли бы вы помочь мне решить эту проблему.
У меня есть Java-код, который запускает команду rsync, используя объект времени выполнения.
Я выполняю приведенный ниже код на исходном компьютере. Если во время синхронизации на целевом компьютере возникнет какая-либо проблема с подключением rsync, код должен получить значение выхода, но сейчас этого не происходит.
String rsyncCommand = "rsync –abv <source> <remoteAddr:dest>"
Runtime rt = Runtime.getRuntime ();
rt.exec(rsyncCommand);
Чтобы дать вам более подробную информацию:
Когда я запускаю команду rsync напрямую (не через код java) на исходном компьютере и если я уничтожаю процесс rsync на целевом компьютере, используя во время синхронизации параметр kill -9, процесс rsync в источнике завершится с сообщением о выходе.
Но если я запускаю rsync через свой Java-код и если я убиваю процесс во время синхронизации в target, он не получает никакого сообщения о выходе. Процессы Java и Rsync все еще находятся в рабочем режиме. Но не выполняет никаких задач.
В чем разница при запуске команды через Java и непосредственно через командную строку?
У любого человека есть схожие проблемы с rsync, есть ли у нас какие-либо другие варианты для запуска rsync через java, я пробовал и с «ProcessBuilder».
Пожалуйста, предоставьте мне несколько советов, чтобы решить эту проблему.
Спасибо за ответ, я дал только пример кода, ниже приведен полный код, который я использую в своем Java.
Runtime rt = Runtime.getRuntime();
Process proc = null;
try {
proc = rt.exec(rsyncCommand);
InputStream stderr = proc.getErrorStream();
InputStreamReader isrErr = new InputStreamReader(stderr);
BufferedReader brErr = new BufferedReader(isrErr);
InputStream stdout = proc.getInputStream();
InputStreamReader isrStd = new InputStreamReader(stdout);
BufferedReader brStd = new BufferedReader(isrStd);
String val = null;
while ((val = brStd.readLine()) != null) {
System.out.println(val);
}
while ((val = brErr.readLine()) != null) {
System.out.println(val);
}
int exitVal = proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}