【问题标题】:Figure out if nodejs crashed弄清楚nodejs是否崩溃
【发布时间】:2015-05-24 01:35:06
【问题描述】:

基本上每次我想将更改推送到我的服务器时,我都会经历这个工作流程。:

node app.js
//if above not crashed
git push heroku <branchname>
git push origin <branchname>

我想编写一个脚本来为我完成所有这些工作。如果运行节点 app.js 崩溃,我需要在脚本中进行计算。我该怎么办?

编辑:

Sam 在下面的回答会检测节点是否崩溃,但如果没有,它会继续运行。我想我想要的是:启动节点。等待 30 秒。如果仍在运行,请继续执行脚本的其余部分

【问题讨论】:

  • 您如何手动确定您的应用是否崩溃?
  • 检查控制台输出。发生这种情况时,Node 会打印一个堆栈跟踪。当它没有崩溃时,我会得到一个输出,比如“应用程序在端口 3000 运行”

标签: node.js bash


【解决方案1】:

取决于您所说的“崩溃”是什么意思,但如果节点进程出现错误,您应该有一个非零退出代码,您可以在脚本中对其进行测试:

#!/bin/bash
node app.js
if [ $? != 0 ] 
then
   echo "app.js failed; exiting"
   exit 1
fi
git push heroku branchname
# etc.

如果您还想检测node 终止而没有错误的情况,但您的脚本app.js 有错误,请确保您process.exit(code) 使用非零代码。

【讨论】:

  • 谢谢!我在shell中测试时使用$?,然后输入错误
  • 这可以正确检测节点崩溃。但这让我意识到,如果它不崩溃,节点进程就不会自行退出。我编辑了原始问题
【解决方案2】:

我认为该节点不会在后台自动启动,所以:

node app.js &
node_pid=$!
sleep 30

if kill -0 $node_pid 2>/dev/null; then
    # still running
    git push heroku $branchname
    git push origin $branchname
fi

向进程发送0 信号是查看它是否还活着的便捷方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-18
    相关资源
    最近更新 更多