2014-11-01 366 views
3

我有一个nodejs应用程序,我想在服务器重启后自动重启。我已经创建了一个脚本来永久启动应用程序,如下所示。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路线,以及托管静态内容,但它确实没什么特别。

谢谢。

回答

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更多用于系统配置。

+0

感谢您的快速响应。我添加了更改目录,一切都很好!我想我已经想了很多关于永远会为我做些什么,特别是因为它需要一个sourceDir参数。活到老,学到老。 (并且我将该应用程序移至/ opt/csc,感谢该技巧)。 – lje 2014-11-01 21:42:32

0
/etc/csc server.js >> 

删除路径中的空间。

/etc/csc/server.js >>