Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 永远无法正确显示正在运行的进程_Node.js_Service_Daemon_Forever_Init.d - Fatal编程技术网

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

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

我正在为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:    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层如果节点应用程序失败,永久返回非零吗?你真的睡觉吗?因为节点应用程序在启动时崩溃,这是在永久返回之后。所以我不认为你的永远真的会返回非零。。你是怎么处理的?