有一段很简单的代码,就是定时定执行一件事。 重点:部署后台是在web上操作的,我只要负责提交代码。其他的一切不需要我都无法操作,我能在web上看到输出。 问题:那台机器上应该是使用了某种守护进程来维护我的代码,主函数会被执行三次,所以时间到了后,我的代码也被执行了3次。 失败的方案:开始的时候使用了cluster.isMaster来判断,如果是主进程才执行。结果失败。三次都是非主进程。 粗糙的方案:当时着急测试,没有办法,只能零时想了一个解决方案。思路就是创建一个本地文件。每次线程启动的时候都会去比较本地文件中的时间戳, 如果大于文件中的时间戳,将文件中的时间戳替换成新的。并且将线程名称替换为当时的时间戳,当执行发送代码的时候,判断下,当下执行的线程名称是否和 文件中的时间戳一致,如果一致,则执行,否则忽略。 代码如下:
let fs = require('fs'); // 引入fs模块 demo(); /** 读取文件*/ function demo(){ fs.readFile('./data.txt', function(err, data) { if (err) { throw err; } /** 文本时间*/ let docTime=data.toString()1; /* 当前时间*/ let timeNow=Date.now();
/** 如果当前时间大于文本时间*/
if(timeNow>docTime){
fs.writeFile('./data.txt', timeNow, function(err) {
if (err) {
throw err;
}
console.log('Saved.');
process.title=timeNow;
});
}
});
console.log('等待一分钟')
setTimeout(outInfo,6000)
}
function outInfo(){ fs.readFile('./data.txt', function(err, data) { if (err) { throw err; } /**文本时间 * */ let docTime=data.toString(); let title=process.title; if(docTime==title){ console.log('符合条件发送') }else{ console.log('不符合条件') } }); } 虽然解决了问题,但是没有从根本上解决问题。以后可能要长期和这个平台打交道,希望能从根本上解决。做一次伸手党