Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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_Solaris_Rsync - Fatal编程技术网

通过java程序Rsync-远程连接故障问题

通过java程序Rsync-远程连接故障问题,java,solaris,rsync,Java,Solaris,Rsync,我正在通过java应用程序运行rsync Java应用程序将与远程计算机同步文件。在连接失败测试期间,我们注意到通过java程序运行rsync时出现了一个问题。如果同步过程中存在任何连接问题,则在源端运行的java应用程序不会收到任何错误消息 关于测试场景的简要详细信息: 我们运行Java程序 java程序启动rsync命令并将大量文件从源同步到远程目标 在同步过程中,我们运行ps-ef | grep rsync,检查进程是否同时在(源端和目的端)运行。两边的rsync进程都在运行 我们在目标机

我正在通过java应用程序运行rsync

Java应用程序将与远程计算机同步文件。在连接失败测试期间,我们注意到通过java程序运行rsync时出现了一个问题。如果同步过程中存在任何连接问题,则在源端运行的java应用程序不会收到任何错误消息

关于测试场景的简要详细信息:

  • 我们运行Java程序
  • java程序启动rsync命令并将大量文件从源同步到远程目标
  • 在同步过程中,我们运行
    ps-ef | grep rsync
    ,检查进程是否同时在(源端和目的端)运行。两边的rsync进程都在运行
  • 我们在目标机器上识别rsync进程id,并使用
    kill-9
  • java代码没有收到任何错误消息,也没有退出。它只是挂了起来
  • 还注意到rsync进程仍在源端运行,并且rsync进程也没有在日志文件中打印任何日志消息

    注意:如果我们直接运行rsync命令(而不是通过java程序),那么一切都正常工作。当我们在目标停止rsync进程时,源进程将停止

    当RSYNC在目标端终止时,Java程序和RSYNC没有检测到目标有问题。没有写入日志文件,Java程序将挂起并变得无响应

    通过perl,它工作得很好。不确定java有什么问题

    我没有任何线索来调试这个问题。 请分享您的想法和调试指针


  • 在Java端,我建议创建两个额外的线程来使用进程p的p.getInputStream()和p.getErrorStream()流。我认为这有助于让你感觉到更多的爱和关怀

    类似这样的事情(为了简单起见,我忽略了IOExceptions——您必须处理它们!):


    在Java端,我建议创建两个额外的线程来使用进程p的p.getInputStream()和p.getErrorStream()流。我认为这有助于让你感觉到更多的爱和关怀

    类似这样的事情(为了简单起见,我忽略了IOExceptions——您必须处理它们!):


    谢谢回复,线程方法对我也不起作用。看起来rsync中有问题。如果我们使用rsync compress选项(-z),它是如何工作的。源RSYC现在能够检测到错误。例如:rsync-abvrz--delete/source//dest/谢谢您的回复,线程方法对我也不起作用。看起来rsync中有问题。如果我们使用rsync compress选项(-z),它是如何工作的。源RSYC现在能够检测到错误。例如:rsync-abvrz--delete/source//dest/
    final Process p = Runtime.exec("rsync"); // however you do this...
    
    Runnable consumeIn = new Runnable() {
      public void run() {
        InputStream in = p.getInputStream();
        InputStreamReader isr = new InputStreamReader(in, "UTF-8");
        BufferedReader br = new BufferedReader(isr);
        String line;
        while ( (line = br.readLine()) != null ) {
          // Throw away the data?  Or do something with it if you like!
        }
      }
    };
    
    Runnable consumeErr = new Runnable() {
      public void run() {
        InputStream in = p.getErrorStream();
        // etc... (very similar to consumeIn)
      }
    };
    
    new Thread(consumeIn).start();
    new Thread(consumeErr).start();