node.js - 永远无法正确显示正在运行的进程

标签 node.js service daemon forever init.d

我正在为永远运行的 Node.js 应用程序编写一个初始化脚本。 Forever 本身就是一个守护进程,在其下运​​行 Node 进程。

我的问题是,当 Node.js 应用程序崩溃时,init 脚本无法捕获该情况,因为永远总是返回 0。

我将永远开始如下:$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

正如您所看到的,几乎没有区别。当我跟踪输出中显示的日志文件时,我看到 Node 抛出的错误。我会在最后看到错误:永远检测到脚本退出,代码为:8

检查失败的Node进程的pid,我看到:

# ps aux | grep  27580
root     27671  0.0  0.0 103240   840 pts/0    S+   18:37   0:00 grep 27580

该进程处于休眠状态。为什么不永远捕获这一点,那个正在 sleep 的进程是什么?为什么它不直接退出?

换句话来说,使用forever,我怎样才能检测到forever尝试运行的进程失败了?为什么永远没有一种简单的方法来管理它?本质上,forever 不就是为了管理 Node 应用程序的启动和停止而设计的吗?检查进程是否实际启动应该是基础功能之一。

最佳答案

您还可以看一下名为 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

关于node.js - 永远无法正确显示正在运行的进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24394122/

相关文章:

Java从受限层调用方法

c# - 调用服务时出现 InvalidOperationException

python - 如何在 Python 中启动后台进程?

linux - 使用 root 以外的用户启动 Docker 守护程序时出错(权限被拒绝)

node.js - 在 flutter 中从 MultipartRequest 发送图像时无法检测到图像

Node.js "Error: read ECONNRESET"

node.js - Nest 恒温器如何通信

windows - 没有密码的 CreateProcessAsUser 和 LogonUser

java - 将 Java 程序作为守护程序服务运行,遵循指南不起作用? (RHEL 5)

javascript - Node.js 集群模块不会在 http.Server.close() 上释放套接字/端口