我有一个在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,非常小的文件。
我还像往常一样在运行和业务期间监控处理器负载,服务器没有过载。
这可能是什么问题? 为什么预定的线程会停止执行? 任何帮助,将不胜感激。谢谢。