当不同远程节点中的文件更改时,我需要在远程节点中触发一个进程。场景是这样的。远程节点中有一个在未知时间运行的 cron。Cron 触发了一些进程,该进程将更改同一节点中的一些文件。我需要做的是,当这些文件发生变化时,我需要对这些文件进行解析并将其填充到另一个远程节点的数据库中。
我怎样才能做到这一点。如何知道文件何时在节点中发生更改,并在其他节点中发现任何更改时触发 .sh 文件。
当不同远程节点中的文件更改时,我需要在远程节点中触发一个进程。场景是这样的。远程节点中有一个在未知时间运行的 cron。Cron 触发了一些进程,该进程将更改同一节点中的一些文件。我需要做的是,当这些文件发生变化时,我需要对这些文件进行解析并将其填充到另一个远程节点的数据库中。
我怎样才能做到这一点。如何知道文件何时在节点中发生更改,并在其他节点中发现任何更改时触发 .sh 文件。
java7 WatchService meet your requirements, code as follow
WatchService watchService=FileSystems.getDefault().newWatchService();
Paths.get("/opt").register(watchService,
StandardWatchEventKinds.ENTRY_CREATE,
StandardWatchEventKinds.ENTRY_DELETE,
StandardWatchEventKinds.ENTRY_MODIFY);
while(true)
{
WatchKey key=watchService.take();
for(WatchEvent<?> event:key.pollEvents())
{
System.out.println(event.context()+" happen "+event.kind());
}
if(!key.reset())
{
break;
}
}
您应该查看基于文件事件运行命令的incrontab http://linux.die.net/man/5/incrontab 。
它基于 inotify 系统调用(http://man7.org/linux/man-pages/man7/inotify.7.html),它提供了一种监视文件系统事件的机制。