antDesign项目因为nodejs进程异常宕机的处理方式

背景:

       项目以antDesign为主体实现,在线上运行时,偶发性的出现因为系统异常导致nodejs进程被kill掉的情况,又因为nodejs为单线程架构,一旦nodejs进程被kill,无法完成自动重启,又因为antDesign的实现底层是依赖与nodejs的,所以此处需要有一个方案,能够监听nodejs进程,并在进程意外结束时自动重启

思路:

     1. 启动nodejs进程,这个进程在antDesign项目中,在通过npm start时会自动创建,所以如果希望能够重启,就需要在代码中调用执行npm start

     2. 进程监听程序,该监听程序作为系统的主程序,启动antDesign的部分作为子程序,同时监控主、子程序的执行情况

    3. 主程序也可能会遇到未捕获的异常,进而导致系统异常退出的情况,所以需要对主程序的未捕获异常进行处理

具体实现:

const fs = require('fs');
//获取子进程对象
const child_process = require('child_process');
//子进程重启
var cat = child_process.spawn('cat');
//调用运行的方法
run();
function run(){
    console.log("into run");
    //在主进程下,调用子进程,执行Linux命令,借助该命令启动antDesign项目
    child_process.exec('npm start', function(error, stdout, stderr) {
        //根据error的结果,来判断是否执行成功
        if(error == null) {
            console.log("服务器启动成功");
        }else{
            console.log("服务器启动失败");
        }
        //执行完成后,启动监听程序
        checkServerStatus();
    });

}
//监听方法
function checkServerStatus(){
    console.log("into checkServerStatus");
    //监控系统的nodejs进程
    child_process.exec('pgrep nodejs', function(e, stdout, stderr) {
        if(e!=null) {
            console.log("服务器异常停止,正在重启");
            console.log(e.message);
            //监听不到nodejs进程后,表示服务器已停止,所以此处调用run()方法完成进程重启
            run();
        }else{
            console.log("服务器正常运行中");
        }
    });
    //每隔5秒监听一次
    setTimeout("checkServerStatus()",5000);
}

//主程序未捕获异常的处理方式
process.on('uncaughtException', function (err) {
    console.log('Caught exception: ' + err);
});

//child_process退出处理
cat.on('exit', function() {
    console.log('child_process退出了');
});
//child_process线程异常捕获处理
cat.on('uncaughtException', function(e) {
    console.log("child_process error==>:"+e);
});

启动项目:

之前的启动方式是直接通过npm start完成,现在可以通过node xxx.js文件完成启动,xxx.js文件就是上段代码保存后的文件名 如:node NPMProcessGuard.js

目前刚刚接触这个antDesign,对node也不熟悉,百般摸索和baidu后才确定目前的处理方案,也有一个说法是针对nodejs程序的,说是可以使用pm2进行管理,但是我目前没有测试成功,后边继续。

转载于:https://my.oschina.net/u/2973079/blog/829706

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值