Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从java执行的rsync返回,未找到文件错误_Java_Ssh_Rsync_Apache Commons Exec - Fatal编程技术网

从java执行的rsync返回,未找到文件错误

从java执行的rsync返回,未找到文件错误,java,ssh,rsync,apache-commons-exec,Java,Ssh,Rsync,Apache Commons Exec,我试图使用ApacheCommonsExec库执行rsync命令(atm本地测试),我得到一条错误消息,而在终端中执行相同的命令显示没有问题 这是我要执行的命令: rsync -zve "ssh -i /home/user/.ssh/testkey" /home/user/playground/src/HNI_0084.JPG user@localhost:/home/user/playground/dst 这是我在Java类中执行命令时收到的错误消息: rsync: Failed to ex

我试图使用ApacheCommonsExec库执行rsync命令(atm本地测试),我得到一条错误消息,而在终端中执行相同的命令显示没有问题

这是我要执行的命令:

rsync -zve "ssh -i /home/user/.ssh/testkey" /home/user/playground/src/HNI_0084.JPG user@localhost:/home/user/playground/dst
这是我在Java类中执行命令时收到的错误消息:

rsync: Failed to exec ssh -i /home/user/.ssh/testkey: No such file or directory (2)
rsync error: error in IPC code (code 14) at pipe.c(84) [sender=3.0.9]
rsync: connection unexpectedly closed (0 bytes received so far) [sender]
rsync error: error in IPC code (code 14) at io.c(605) [sender=3.0.9]
org.apache.commons.exec.ExecuteException: Process exited with an error: 14 (Exit value: 14)
    at org.apache.commons.exec.DefaultExecutor.executeInternal(DefaultExecutor.java:377)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:160)
at org.apache.commons.exec.DefaultExecutor.execute(DefaultExecutor.java:147)
    at LocalExecutor.execute(LocalExecutor.java:21)
这是我用来执行本地命令的java类:

import java.io.IOException;

import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteWatchdog;

public class LocalExecutor {

    public int execute(String command, String[] args) {
        CommandLine cl = new CommandLine(command);
        cl.addArguments(args);
        System.out.println(cl.toString());

        DefaultExecutor executor = new DefaultExecutor();
        ExecuteWatchdog watchdog = new ExecuteWatchdog(60000);
        executor.setWatchdog(watchdog);
        int exitValue = 0;
        try {
            exitValue = executor.execute(cl);
        } catch (IOException e) {
            e.printStackTrace();
        }
        return exitValue;
    }

}
最后,传递给程序的参数数组如下:

{-zve, ssh -i /home/user/.ssh/testkey, /home/user/playground/src/HNI_0084.JPG, user@localhost:/home/user/playground/dst/}
完全不知道为什么rsync会抱怨这个调用,因为引用包含空格的参数是由库处理的,而实际的rsync调用应该与我上面发布的行完全相同


有什么想法吗/

从java代码执行时,rsync可能找不到ssh。尝试使用ssh exectable的完整路径,而不仅仅是传递命令