Open barretlee opened 9 years ago
var child_process = require('child_process');
// deamon
function spawn(mainModule) {
var worker = child_process.spawn('node', [ mainModule ]);
worker.on('exit', function (code) {
if (code !== 0) {
setTimeout(function(){
spawn(mainModule);
}, 1000 * 60 * 5);
}
});
// worker.stdout.setEncoding('utf8');
// worker.stdout.on('data', function (data) {
// console.log(data);
// });
worker.stderr.setEncoding('utf8');
worker.stderr.on('data', function (data) {
console.log(data);
});
}
var timer = null;
function t(){
spawn("./collect.js");
clearTimeout(timer);
timer = setTimeout(function(){
t();
}, 24 * 60 * 60 * 1000);
}
// collect.js 片段
function getLog(st){
var et = st + delta;
var url = API + querystring.stringify({
st: st,
et: et
});
return new Promise(function(resolve, reject){
http.get(url, function(res){
// debug(url);
var body = [], len = 0;
res.on("data", function(chunk){
body.push(chunk);
len += chunk.length;
});
res.on("end", function(){
body = Buffer.concat(body, len).toString();
try{
body = JSON.parse(body);
} catch(e){
console.log("估计请求太汹涌,服务器502了。");
process.exit(1);
}
if(body.msg != "ok"){
reject("Request Error: " + url);
return;
}
formatData(body);
delete body;
resolve();
});
}).on("error", function(err){
reject(err);
});
});
}
定时跑一个程序,这个程序会发送很多网络请求,挂掉的可能性是很大的,如果只是在程序内做些容错控制,内存会暴涨,也不方便对错误做梳理。
现打算,使用 Master 来控制多个 Child,Child 进程挂了之后,Master 重新启动,Child 不做过多的错误处理,出了问题就重来,大的任务分解成小任务,通过 Master 来分发管理。