更多分类文章:
Python | Linux | 大数据 | 数据库 | Git | Nodejs | Golang | 电脑技巧 | 计算机技术
nodejs服务断掉后自动重启,采用fork方式运行。
var fork = require('child_process').fork;
//保存子进程实例数组
var workers = [];
//这里的子进程理论上可以无限多
var appsPath = ['./test2.js','./test3.js'];
var nodeToArgs = [];
var createWorker = function(appPath){
//保存fork返回的进程实例
let args = nodeToArgs[appPath];
let currentRound = args[3];
var worker = fork(appPath,args);
//监听子进程exit事件
worker.on('exit',function(){
console.log('worker:' + worker.pid + 'exited');
nodeToArgs[appPath][3] += 1;
delete workers[worker.pid];
console.log(currentRound * compacNums + startPage <= endPage);
if(currentRound * compacNums + startPage <= endPage){
createWorker(appPath);
}
});
workers[worker.pid] = worker;
console.log('Create worker:' + worker.pid);
};
//启动所有子进程
// for (let i = appsPath.length - 1; i >= 0; i--) {
// nodeToArgs[appsPath[i]] = [argv1,argv2,argv3,argv4];
// createWorker(appsPath[i]);
// }
var startPage;
var endPage;
var compacNums;
var startRound;
function main(arg1,arg2,arg3,arg4) {
startPage = arg1;
endPage = arg2;
compacNums = arg3;
startRound = arg4;
appsPath.forEach(appPath =>{
nodeToArgs[appPath] = [startPage,endPage,compacNums,startRound];
createWorker(appPath);
});
}
main(1,10,3,1);
//父进程退出时杀死所有子进程
process.on('exit',function(){
for(var pid in workers){
workers[pid].kill();
}
console.log("主程序结束!")
});
原文链接:fork方式运行指定js文件(自动重启)