重启后,nodejs应用程序无法正常启动

时间:2014-11-01 21:01:38

标签: node.js restify forever

我有一个nodejs应用程序,我想在服务器重启后自动重启。我创建了一个脚本来永久启动应用程序,如下所示。

#!/bin/sh
export PATH=/usr/bin:$PATH
forever start --command node --minUptime 1000 --spinSleepTime 10000 --sourceDir /etc/csc server.js >> /etc/csc/log.txt 2>&1

我还创建了一个crontab条目,以便在重启后运行此脚本:

@reboot /etc/csc/csc-starter.sh

虽然,我不认为crontab部分真的很重要,我将在下面解释。问题是虽然nodejs应用程序在重新启动后启动,但它不能正确响应客户端请求。例如,调用应该导致正在显示的应用程序主视图的URL(在浏览器中)会产生以下输出:

{
code: "ResourceNotFound",
message: "/"
}

有趣的是,当我手动调用启动脚本时,会观察到相同的输出。但是,如果我使用:

手动运行nodejs应用程序
node /etc/csc/server.js

效果非常好。我是Linux的一个相对新手,你可以放心地假设我可能没有意识到在Linux中工作的一些公认的事实,例如将应用程序置于/ etc之下的合适性。

为什么永远启动应用程序的任何想法会改变它的内部行为?有问题的应用程序非常简单。它基于restify,有几条REST路由,以及托管静态内容,但它真的没什么特别的。

感谢。

2 个答案:

答案 0 :(得分:3)

/ etc可能不是您应用的最佳位置。虽然这与你的问题没有直接关系。

当您从命令行手动启动应用程序时,您可能已经在/ etc / csc目录中。

尝试将目录更改添加到启动脚本中:

#!/bin/sh
export PATH=/usr/bin:$PATH
cd /etc/csc
forever start --command node --minUptime 1000 --spinSleepTime 10000 --sourceDir /etc/csc server.js >> /etc/csc/log.txt 2>&1

应用程序可能配置为使用当前目录下的子目录作为其静态资源。

-

您应该考虑将您的应用放入/ opt / csc。它是第三方应用程序的更通用的地方。 / etc更适用于系统配置。

答案 1 :(得分:0)

/etc/csc server.js >>

删除路径中的空格。

/etc/csc/server.js >>