用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); }
此時。系統會一直重啟重啟。。。