我正在研究更多的安全仪表板,它会监视整个主目录中文件的变化,包括数百个站点(所有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开销。
答案 0 :(得分:0)
请勿使用package 'watch'
,只需使用fs.watch(...)
打包'观看':
<强> fs.watch(..)强>