我有一个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路由,以及托管静态内容,但它真的没什么特别的。
感谢。
答案 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 >>