【问题标题】:nodejs app does not start up correctly with forever after reboot重启后nodejs应用程序无法正确启动
【发布时间】:2014-11-02 05:16:55
【问题描述】:

我有一个 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 路由,以及托管静态内容,但它真的没什么花哨的。

谢谢。

【问题讨论】:

    标签: node.js restify forever


    【解决方案1】:

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

    【讨论】:

    • 感谢您的快速回复。我添加了更改目录,一切都很好!我想我对永远会为我做的事情做了很多假设,特别是因为它需要一个 sourceDir 参数。活到老,学到老。 (我将应用程序移至 /opt/csc,也感谢您的提示)。
    【解决方案2】:
    /etc/csc server.js >>
    

    删除路径中的空格。

    /etc/csc/server.js >>
    

    【讨论】:

      猜你喜欢
      • 2018-04-04
      • 2013-10-13
      • 2014-07-21
      • 2016-08-15
      • 2014-08-27
      相关资源
      最近更新 更多