用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); }
此时。系统会一直重启重启。。。