Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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 计划进程在多次执行后停止工作_Java_Multithreading_Rsync - Fatal编程技术网

Java 计划进程在多次执行后停止工作

Java 计划进程在多次执行后停止工作,java,multithreading,rsync,Java,Multithreading,Rsync,我有一个在linux机器上运行的程序。该程序有一个类,它每分钟安排一个线程执行。线程应该执行多个计算,创建一个文本文件,然后使用rsync将该文件同步到另一台机器 该类如下所示: public class Generator { private ScheduledThreadPoolExecutor SchEventPool = new ScheduledThreadPoolExecutor(5); public void generate() { LocalDate

我有一个在linux机器上运行的程序。该程序有一个类,它每分钟安排一个线程执行。线程应该执行多个计算,创建一个文本文件,然后使用
rsync
将该文件同步到另一台机器

该类如下所示:

public class Generator {

    private ScheduledThreadPoolExecutor SchEventPool = new ScheduledThreadPoolExecutor(5);

public void generate() {
        LocalDateTime ldt = LocalDateTime.now();
        int delay = 60 - ldt.getSecond();

        SchEventPool.scheduleWithFixedDelay(new HelperClass(), delay, 60, SECONDS);
    }

private class HelperClass implements Runnable{

        @Override
        public void run() {
            // some calculations
            // .
            // . 
            // .
            FileBuild();        
        }

        private void FileBuild(){
            try{
                String filepath = System.getProperty("user.dir") + "/SomeDir/somefile.txt";
                File f = new File;
                BufferedWriter writer = new BufferedWriter(new FileWriter(f));
                for (int i = 0; i < 100; i++){
                      writer.write("write something into the file" + "\n");
                }
                writer.close();
            } catch (IOException ex) {ex.printStackTrace();}
            // synchronize the file
            synchronize();
        }

        public void synchronize(){
        try {
            String[] cmd = new String[]{"rsync", "--remove-source-files", "-avre", "/usr/bin/sudo /usr/bin/ssh -i /home/user/.ssh/id_rsa", "/home/user/project/SomeDir,                                     "user@server.ip:/home/user/project/AnotherDir/"};
            Process p = new ProcessBuilder().command(cmd).start();
        } catch (IOException ex) {ex.printStackTrace();}
    }

}
公共类生成器{
私有ScheduledThreadPoolExecutor SchEventPool=新ScheduledThreadPoolExecutor(5);
public void generate(){
LocalDateTime ldt=LocalDateTime.now();
int delay=60-ldt.getSecond();
SchEventPool.scheduleWithFixedDelay(新的HelperClass(),延迟,60秒);
}
私有类HelperClass实现可运行{
@凌驾
公开募捐{
//一些计算
// .
// . 
// .
FileBuild();
}
私有void FileBuild(){
试一试{
字符串filepath=System.getProperty(“user.dir”)+“/SomeDir/somefile.txt”;
文件f=新文件;
BufferedWriter writer=新的BufferedWriter(新文件写入程序(f));
对于(int i=0;i<100;i++){
writer.write(“将某物写入文件”+“\n”);
}
writer.close();
}catch(IOException ex){ex.printStackTrace();}
//同步文件
同步();
}
公共void同步(){
试一试{
String[]cmd=new String[]{“rsync”、“--remove source files”、“-avre”、“/usr/bin/sudo/usr/bin/ssh-i/home/user/.ssh/id_rsa”、“/home/user/project/SomeDir,”user@server.ip:/home/user/project/AnotherDir/“};
进程p=newprocessbuilder().command(cmd.start();
}catch(IOException ex){ex.printStackTrace();}
}
}
当我运行主程序并调用
generate()
方法时,进程成功运行约30分钟,有时更长,有时更短,然后计划线程的执行停止。没有任何错误或警告。 我应该提到的是,正在同步到第二台机器的文件大约是1500 KB,非常小的文件。 我还监控了运行期间的处理器负载,一切正常,服务器没有过载

这里可能有什么问题? 为什么调度线程会停止执行?
任何帮助都将不胜感激。谢谢。

我会尝试一下。尽管我想我已经尝试过了。@MarianP di无济于事。它运行了大约25分钟并冻结了。我建议您添加日志记录并对被阻止的程序进行线程转储。