用nodejs做了一个图片下载的工具,发现不管延迟多少时间下载,一旦图片成千上万张之后,使用http,或者download模块,总是会中间出现几次uncauchException异常,promise似乎也无法捕获,导致系统直接挂掉。最终也没有办法解决,只能转而求其次,在系统宕掉之后自动重启服务,继续下载。于是使用了nodejs的child_process做了一个简单的实现:
下面是测试demo。
// start.js
test();
function test() {
console.log("服务进行中。。。");
setTimeout(function () {
console('模拟各种异步业务逻辑。。。');
//业务正常执行完成,系统退出。
process.exit(0);
},1000);
}
//auto.js
//自动重启
let process = require('child_process');
let fs = require('fs-extra');
let ChildProcess = process.fork('./start.js');
ChildProcess.on('exit',function (code) {
console.log('process exits + '+code);
fs.appendFileSync('./log.txt','线程退出');
if(code !== 0){
process.fork('./auto.js');
}
});
最后,配置一下windows的命令文件:
//autoStart.bat @echo off node auto.js @pause
点击改文件,或者直接打开cmd,运行 node auto.js后,系统正常退出,不会重启。
修改start.js 代码,
// start.js
test();
function test() {
console.log("服务进行中。。。");
setTimeout(function () {
console('模拟各种异步业务逻辑。。。');
let c= a.b;// 这里a undefined.所以会报错
//业务正常执行完成,系统退出。
process.exit(0);
},1000);
}
此时。系统会一直重启重启。。。
