NodeJS大目录文件发生了变化

时间:2013-12-12 22:37:31

标签: node.js watch

我正在研究更多的安全仪表板,它会监视整个主目录中文件的变化,包括数百个站点(所有Joomla,所以很多文件)。

为了掌握潜在的安全问题,我们希望以有效的方式监视文件更改,而不会产生不必要的CPU /内存开销。我们希望以更快的间隔观察它,但我知道它更多的是一种平衡行为,当你想要使它不使用更多的cpu然后一个副流程应该。

我尝试使用以下代码使用“watch”,在主目录中运行:

var watch, fs;
watch = require('watch');
fs = require('fs');

watch.createMonitor(__dirname,{interval:500,filter:function(file,stat){
    if(file.indexOf('index.php')!=-1){
        return true;
    }else{
        return false;
    }
}},function(monitor){
    monitor.filter(function(file){
        console.log(file);
    })
    monitor.on('created',function(file,stat){
        console.log(file + ' new');
    });
    monitor.on('changed',function(file,stat){
        console.log(file + ' changed');
    });
    monitor.on('removed',function(file,stat){
        console.log(file + ' deleted');
    });
});

然而,这会使CPU超过单核(有时是2)的100%。内存也很快占据8gb的20%左右。这只是为了在所有文件上创建监视事件,所以在它实际上可以检测到任何文件更改之前。

我知道这个问题是它单独遍历每个文件,并且只有在您过滤那种文件时才会跟踪它。通常我需要注意的是每个目录中的index.php,直到它可以是一致的(有一些例外)。

是否已经建立了一个模块来执行此操作?或者这是新的东西?我找到的所有模块都假设它是一个较小的目录(比如看LESS或其他东西)所以根本不是为这种应用程序构建的。

有什么想法吗?我知道这段代码需要废弃,因为我无法看到停止CPU开销。

1 个答案:

答案 0 :(得分:0)

请勿使用package 'watch',只需使用fs.watch(...)

打包'观看':

<强> fs.watch(..)