永远不能正确显示正在运行的进程

时间:2014-06-24 18:49:42

标签: node.js service daemon forever init.d

我正在为永远运行的Node.js应用程序编写一个init脚本。 Forever是一个守护进程本身,它在其下运行节点进程。

我的问题是,当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

如您所见,几乎没有区别。当我拖尾输出中显示的日志文件时,我看到节点抛出的错误。我最后会看到error: Forever detected script exited with code: 8

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

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

该过程处于睡眠状态。为什么不能永远捕捉到这一点以及正在睡觉的那个过程是什么?为什么它不退出?

换句话说,永远使用,如何检测永远尝试运行的进程失败?为什么不能永远有一个简单的方法来管理它?从本质上讲,是不是永远都是为了管理启动和停止Node应用程序而设计的?检查过程是否真正开始应该是基础功能之一。

1 个答案:

答案 0 :(得分:0)

你也可以看一下永远叫做的NON 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