像下面这样使用轮询来检查文件的内容是否被更改,然后调用其他两个函数
var poll_max_date=AsyncPolling(function (end,err) { if(err) { console.error(err); } var stmp_node_id=fs.readFileSync(path.join(__dirname,'node_id'),"utf8"); console.log("--------loaded node : "+stmp_node_id); if(druid_stmp_node_id!=stmp_node_id) { // MAX DATA CUT-OFF DRUID QUERY druid_exe.max_date_query_fire(); // // DRUID QUERY FOR GLOBAL DATA druid_exe.global_druid_query_fire(); druid_stmp_node_id=stmp_node_id; } end(); }, 1800000).run();//30 mins
它在一段时间内工作正常,但随后在 4-5 小时后低于错误:
events.js:167 抛出错误;// 未处理的“错误”事件 ^
错误:在 TCP.onStreamRead (internal/stream_base_commons.js:111:27) 读取 ECONNRESET 在 emitErrorNT (internal/streams/destroy.js:82:8) 在 emitErrorAndCloseNT (internal/streams/destroy. js:50:3)
尝试使用 fs.watch 来监视文件中的更改,而不是像下面这样轮询:
让 md5Previous = null; 让 fsWait = 假;
fs.watch(dataSourceLogFile, (event, filename) => { if (filename) {
if (fsWait) return; fsWait = setTimeout(() => { fsWait = false; }, 1000); const md5Current = md5(fs.readFileSync(dataSourceLogFile)); if (md5Current === md5Previous) { return; } md5Previous = md5Current; console.log(`${filename} file Changed`); // MAX DATA CUT-OFF DRUID QUERY druid_exe.max_date_query_fire(); // DRUID QUERY FOR GLOBAL DATA druid_exe.global_druid_query_fire(); } });
它在一段时间内也可以正常工作,但在 4 - 5 小时后会出现同样的错误:
events.js:167 抛出错误;// 未处理的“错误”事件 ^
错误:在 TCP.onStreamRead (internal/stream_base_commons.js:111:27) 读取 ECONNRESET 在 emitErrorNT (internal/streams/destroy.js:82:8) 在 emitErrorAndCloseNT (internal/streams/destroy. js:50:3)
但是当在本地机器上运行时,它工作正常。该错误仅在远程 Linux 机器上运行时发生。
有人可以帮我解决这个问题吗?