我一直在尝试让我的nodejs服务器进程由超级用户监控,但是我在使超级用户supervised.conf正常工作时遇到了问题。部署时,出现以下错误:

WARNING: The service crashed at startup or is listening to the wrong port. It failed to respond on port "node" (42801) within 30 seconds. Please check the application logs.


但是,当我ssh进入dotcloud服务器并手动启动nodejs进程时,它运行得很好,表明主管无法启动节点实例。

我的supervisord.conf看起来像这样:

[program:node]
command = node /home/dotcloud/current/app/server.js
autostart=true
autorestart=true


我的目录结构如下:

.dotcloudignore
dotcloud.yml
.gitignore
app/
app/package.json
app/server.js
app/supervisord.conf


在这一点上,我看不到我在做什么错,因为这似乎是与here概述的目录结构相同,所以我对解决方案有点茫然。有任何想法吗?

编辑:

尝试supervisorctl status后,我得到以下信息:

node                             FATAL      Exited too quickly (process log may have details)


我发现在/ var / log / supervisor中,我收到以下错误消息:

module.js:337
    throw new Error("Cannot find module '" + request + "'");
          ^
Error: Cannot find module '/home/dotcloud/current/app/server.js'
    at Function._resolveFilename (module.js:337:11)
    at Function._load (module.js:279:25)
    at Array.0 (module.js:484:10)
    at EventEmitter._tickCallback (node.js:190:38)


我不确定是什么原因造成的。

最佳答案

在调查了该问题之后,看来该问题是由于dotcloud.yml指定了approot: app这一事实引起的。在这种情况下,需要注意以下几点:


/home/dotcloud/code将指向整个代码存储库;
/home/dotcloud/current将指向approot(更具体地说,/home/dotcloud/current是指向approot的符号链接,即code/app)。


因此,supervisord.conf不应包含:

command = node /home/dotcloud/current/app/server.js


但反而:

command = node /home/dotcloud/current/server.js


关键在于Node.js自己记录日志,因为Node.js抱怨无法找到/home/dotcloud/current/app/server.js

08-04 21:30