我正在使用节点进行服务器端处理 - 浏览大数据文件,然后插入数据库。这将在一个cron工作每晚运行。在程序中有几个需要完成的任务。我已设置child_process
,以便正确执行这些不同的任务。但是,我希望整个事情都有一个错误处理部分。如果有任何步骤出错,我想发一封电子邮件给我,以便我知道。当我看到这个时,我认为它会捕获子进程中的错误,并允许我发送有问题的电子邮件。
process.on('error', function (err) {
console.log("Error running Scripts")
sendErr(err);
});
然而,我很快发现这只会在产生过程时捕获错误,而不是在实际执行中。但后来我找到了uncaughtException
事件,并用error
替换了上面代码中的uncaughtException
。不幸的是,它没有像我希望的那样工作,并且代码没有运行,并且没有发送电子邮件。有人知道怎么做,或者看我做错了什么。这是我目前的代码
var process = childProcess.fork(scriptName, {cwd:scriptWorkingDirectory});
process.on('uncaughtException', function (err) {
console.log("Error running Scripts")
sendErr(err);
});
答案 0 :(得分:2)
您必须在子进程中执行process.on('uncaughtException', ...)
而不是在父进程中。
家长无法听到子进程中的错误。
您可以在父母的'end'
事件中收听,看看孩子是否已经结束,但是您只能根据退出代码判断它是否结束了。
因此,在孩子听取uncaughtException
时,您可以通过subprocess.send
向子进程发送消息给父进程
父进程可以根据需要发送邮件。