IRIP项目中,Agent每分钟都要向Director请求数据。为了保证Agent正常运行,防止意外中断,我添加了Windows schedule task 去定时启动Agent(Agent运行在Windows系统上)。
同时,为了保证Agent不被多次启动,我在Agent中使用了文件锁技术。当Agent启动时,会得到一个指定文件的锁,如果Agent正常运行,该锁会一直保持,不会释放,除非Agent中断,才会释放该锁。每次Windows schedule task去启动Agent时,就会先判断是否能得到指定文件的锁,如果Agent正在正常运行,说明该指定文件的锁已经被占用,本次启动就无法拿到指定文件的锁,拿不到锁,就撤销本次启动,达到防止Agent多次运行的目的。
文件锁的使用很简单,下面简要给出例子:
import java.io.FileOutputStream;
import java.nio.channels.FileLock;
public class FileLocking {
public static void main(String[] args) throws Exception {
FileOutputStream fos;
fos = new FileOutputStream("file.txt");
FileLock fl = fos.getChannel().tryLock();//得到锁
if (fl != null) {//调用自己的操作
System.out.println("Locked File");
doSomething();//这是一个会一直运行下去的操作
fl.release();
System.out.println("Released Lock");
}else{
//得不到锁,退出程序,这能保证该进程同时只能执行一个
return;
}
fos.close();
}
}