【问题标题】:Trigger a process on change of a file in unix在unix中触发文件更改的过程
【发布时间】:2014-10-22 00:45:26
【问题描述】:

当文件在不同的远程节点中发生更改时,我需要在远程节点中触发一个进程。场景是这样的。远程节点中有一个在未知时间运行的 cron。 Cron 触发了一些进程,该进程将更改同一节点中的一些文件。我需要做的是,当这些文件发生变化时,我需要对这些文件进行解析并将其填充到另一个远程节点的数据库中。

我怎样才能做到这一点。如何知道某个节点中的文件何时发生更改,并在其他节点中发现任何更改时触发 .sh 文件。

【问题讨论】:

标签: java unix cron cron-task crontrigger


【解决方案1】:

java7 WatchService 满足你的要求,代码如下

    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;  
        }  
    }

【讨论】:

    【解决方案2】:

    您应该查看基于文件事件运行命令的 incrontab http://linux.die.net/man/5/incrontab

    它基于inotify syscall (http://man7.org/linux/man-pages/man7/inotify.7.html),它提供了一种监控文件系统事件的机制。

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-08
      • 1970-01-01
      相关资源
      最近更新 更多