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