gpt4 book ai didi

java - 在Windows上从java调用rsync + ssh的问题

转载 作者:行者123 更新时间:2023-12-01 06:00:21 26 4
gpt4 key购买 nike

我在安装了 cygwin 的 Windows Vista 上从 java 调用 rsync 时遇到问题。奇怪的是,将完全相同的命令粘贴到命令 shell 中效果很好。

我的测试 java 调用如下所示。

String[] envVars = {"PATH=c:/cygwin/bin;%PATH%"};
File workingDir = new File("c:/cygwin/bin/");
Process p = Runtime.getRuntime().exec("c:/cygwin/bin/rsync.exe -verbose -r -t -v --progress -e ssh /cygdrive/c/Users/dokeeffe/workspace/jrsync/ www.servername.net:/home/dokeeffe/rsync/",envVars,workingDir);

然后我启动 2 个流读取器线程来捕获并记录 Process p 的 inputStream 和 errorStream。

这是输出......

DEBUG: com.mddc.client.rsync.StreamGobbler - opening connection using: ssh www.servername.net rsync --server -vvtre.iLs . /home/dokeeffe/rsync/
DEBUG: com.mddc.client.rsync.StreamGobbler - rsync: pipe: Operation not permitted (1)
DEBUG: com.mddc.client.rsync.StreamGobbler - rsync error: error in IPC code (code 14) at /home/lapo/packaging/rsync-3.0.4-1/src/rsync-3.0.4/pipe.c(57) [sender=3.0.4]

发生错误的rsync代码是pipe.c(57),就是这个。

if (fd_pair(to_child_pipe) < 0 || fd_pair(from_child_pipe) < 0) {
rsyserr(FERROR, errno, "pipe");
exit_cleanup(RERR_IPC);
}

因此,由于某种原因,fd_pair(to_child_pipe) < 0 或 fd_pair(from_child_pipe) < 0。

如果有人有任何建议那就太好了,因为我现在陷入困境。谢谢,

最佳答案

cygwin 的 rsync 二进制发行版可以识别 ssh 命令吗?当您放入 shell 时,您尝试执行的命令可能工作正常,因为像 bash 这样的东西知道如何解释 ssh 命令来建立连接,即使用 ssh 程序为 rsync 程序创建连接。根据您的调试信息,我认为 rsync 正在等待连接,但收到了一个无法通过管道传输的字符串“ssh ...”。

要解决这个问题,您必须让 bash 为您完成工作。看this page在关于照顾 child 的线程部分中。您需要 fork 命令 shell 的实例并将命令写入 shell 子进程。所以像这样:

Process p = Runtime.getRuntime().exec("c:/cygwin/bin/bash.exe");
OutputStreamWriter osw = new OutputStreamWriter(p.getOutputStream());
BufferedWriter bw = new BufferedWriter( osw, 100);
try{
bw.write(command);
bw.close();
}catch(IOExeception e){
System.out.println("Problem writing command.");
}

您可能也想读取进程输出,因为如果您不读取它,它将停止执行。提供的链接很好地涵盖了该主题。

关于java - 在Windows上从java调用rsync + ssh的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686701/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com