我一直在尝试让我的nodejs服务器进程由主管监控,但是我遇到了让supervisord.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.
然而,当我进入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)
我不确定是什么导致了这一点。
答案 0 :(得分:2)
在调查此问题后,问题似乎来自dotcloud.yml
指定approot: app
的事实。在这种情况下,请注意:
/home/dotcloud/code
将指向整个代码存储库; /home/dotcloud/current
将指向该批准(更具体地说,/home/dotcloud/current
将是该批准的符号链接,即该情况下的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
。