Java 计划进程在多次执行后停止工作
我有一个在linux机器上运行的程序。该程序有一个类,它每分钟安排一个线程执行。线程应该执行多个计算,创建一个文本文件,然后使用Java 计划进程在多次执行后停止工作,java,multithreading,rsync,Java,Multithreading,Rsync,我有一个在linux机器上运行的程序。该程序有一个类,它每分钟安排一个线程执行。线程应该执行多个计算,创建一个文本文件,然后使用rsync将该文件同步到另一台机器 该类如下所示: public class Generator { private ScheduledThreadPoolExecutor SchEventPool = new ScheduledThreadPoolExecutor(5); public void generate() { LocalDate
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分钟并冻结了。我建议您添加日志记录并对被阻止的程序进行线程转储。