我看我上的NodeJS使用Ubuntu服务器的配置文件:
for( var index in cfgFiles ) {
fs.watch(cfgFiles[index], function(event, fileName) {
logger.info("======> EVENT: " + event);
updateConfigData(fileName);
});
}
所以每当我保存配置文件,接收到“改变”事件至少两次被处理函数相同的文件名引起updateConfigData()被执行多次。 看使用C ++ / inotify的配置文件,当我经历了同样的行为。
有没有人有一个线索是什么原因导致这种行为?
答案很简单:这不是节点,文件真的变了两次。
长的答案
我有我用我的开发设置了非常类似的方法。 我的经理进程监视所有的JS源文件,如果它是一个开发机和集群上重新启动孩子的。
我还没有关注到这一点,因为这只是开发设置; 但之后,我看了你的问题,我给它一看,发现我有相同的行为。
我在我的本地计算机上编辑文件和我的编辑更新它们在SFTP每当我保存。 在每次保存时,将触发两次在文件更改事件。
我已经检查监听器由fs.watch调用返回的FSWatcher对象(“变化”); 但它表明只有一次我的事件处理程序。
然后我做了测试我应该先做到:在服务器上“触摸file.js”,它触发一次。 所以,对我来说,它不是节点; 但文件是真的换了两次。 当文件被打开写(而不是追加),它可能引发的变化,因为它清空内容。 然后,当新的内容写入,它触发第二次事件。
这不会导致我的任何问题; 但如果你想阻止它,你可以通过保持呼叫号码为每个文件在您的事件处理函数的奇偶控制,做你的偶次通话只能做。
见我对一个类似问题的响应 ,其解释说,问题是由编辑器进行多次编辑该文件保存时引起的。