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

时间:2017-11-12 16:56:28

标签: java multithreading rsync

我有一个在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();}
    }

}

当我运行主程序并调用generate()方法时,该过程成功运行大约30分钟,有时更少,有时更少,然后停止执行预定的线程。没有任何错误或任何警告。 我应该提到正在同步到第二台机器的文件是大约1500 KB,非常小的文件。 我还像往常一样在运行和业务期间监控处理器负载,服务器没有过载。

这可能是什么问题? 为什么预定的线程会停止执行? 任何帮助,将不胜感激。谢谢。

0 个答案:

没有答案