Node.js 永远无法正确显示正在运行的进程
我正在为Node.js应用程序编写一个init脚本,该应用程序将永远运行。Forever本身就是一个守护进程,在其下运行节点进程 我的问题是,当Node.js应用程序崩溃时,init脚本不会捕捉到它,因为forever总是返回0 我将永远开始如下:Node.js 永远无法正确显示正在运行的进程,node.js,service,daemon,forever,init.d,Node.js,Service,Daemon,Forever,Init.d,我正在为Node.js应用程序编写一个init脚本,该应用程序将永远运行。Forever本身就是一个守护进程,在其下运行节点进程 我的问题是,当Node.js应用程序崩溃时,init脚本不会捕捉到它,因为forever总是返回0 我将永远开始如下:$forever start--pidFile$pidFile-al$LOGFILE-ao$OUTFILE-ae$ERRFILE$SERVER 当Node.js正确启动并且我列出一个列表时,我得到: # forever list info: Fo
$forever start--pidFile$pidFile-al$LOGFILE-ao$OUTFILE-ae$ERRFILE$SERVER
当Node.js正确启动并且我列出一个列表时,我得到:
# forever list
info: Forever processes running
data: uid command script forever pid logfile uptime
data: [0] UP0C /usr/bin/node /some/path/here/server.js 27322 27324 /root/.forever/UP0C.log 0:0:6:3.493
当它崩溃时,我看到:
# forever list
info: Forever processes running
data: uid command script forever pid logfile uptime
data: [0] QFel /usr/bin/node /some/path/here/server.js 27578 27580 /root/.forever/QFel.log 0:0:1:6.207
正如你所看到的,几乎没有区别。当我跟踪输出中显示的日志文件时,我看到节点抛出的错误。我将看到error:Forever-detected脚本退出,最后显示代码:8
检查失败节点进程的pid,我看到:
# ps aux | grep 27580
root 27671 0.0 0.0 103240 840 pts/0 S+ 18:37 0:00 grep 27580
进程处于休眠状态。为什么永远都不能抓住它,睡眠的过程是什么?为什么不直接退出呢
换句话说,使用forever,我如何检测forever尝试运行的进程失败?为什么永远都没有一个简单的方法来管理呢?本质上,永远不是为了管理启动和停止节点应用程序而设计的吗?检查进程是否实际启动应该是一项重要功能。您还可以查看forever的非cli版本,称为:
forever-monitor
https://github.com/nodejitsu/forever-monitor
它提供了订阅所需的所有事件,如:
error [err]: Raised when an error occurs
start [process, data]: Raised when the target script is first started.
stop [process]: Raised when the target script is stopped by the user
restart [forever]: Raised each time the target script is restarted
exit [forever]: Raised when the target script actually exits (permenantly).
stdout [data]: Raised when data is received from the child process' stdout
stderr [data]: Raised when data is received from the child process' stderr
我猜您的节点应用程序实际上并没有消亡。有可能是什么东西让它活着吗?我自己使用forever,并且可以在节点进程停止的情况下验证它是否按预期工作。我在文件顶部放置了一个语法错误,并且我在文件中看到了节点语法错误,它显示forever检测到脚本已退出,代码为8。也就是说,节点应用程序已退出。您的forever是否也返回非零,或者您是如何检测它的?请注意,在崩溃后运行“forever list”后,您的进程id已更改。我认为您的脚本启动正确,但是,如果您的应用程序在执行的最初几秒钟内崩溃,那么forever将停止尝试重新启动。这可能就是你在这里遇到的情况。它发生了变化,因为这是两次不同的跑步。一个是正确的,另一个有语法错误。@第1层如果节点应用程序失败,永久返回非零吗?你真的睡觉吗?因为节点应用程序在启动时崩溃,这是在永久返回之后。所以我不认为你的永远真的会返回非零。。你是怎么处理的?