【问题标题】:How to keep a Node JS server running on shared hosting如何让 Node JS 服务器在共享主机上运行
【发布时间】:2021-11-17 20:45:22
【问题描述】:

我希望在共享托管环境中测试节点服务器。

我正在使用 ssh 终端会话进行测试。

服务器工作正常,当然你不能在不停止服务器的情况下离开终端会话。

使用 pm2(npm 包),我能够保持服务器运行,但在退出终端会话时,pm2 作业也会退出,从而停止服务器。很好奇为什么会这样。

尝试使用 crontab 运行 shell 脚本,该脚本又运行 pm2,而 pm2 又启动节点服务器。 cron 选项卡每分钟运行一次,但节点服务器从不启动。

sh 脚本运行良好,pm2 运行良好,节点服务器运行良好。 什么不起作用:在退出终端会话后保持节点服务器运行。

这是运行 pm2 以触发节点服务器的 shell 脚本...

ps cax | grep node > /dev/null
if [ $? -eq 0 ]; then
  echo "Process running."
else
  echo "Process not running."
  PATH=$PATH:/usr/local/bin
  pm2 start '/path/to/NodeServer.js' --restart-delay=100
fi

【问题讨论】:

  • 你试过pm2 startup命令吗? pm2 尝试检测您的 init 系统并告诉您如何将其配置为在启动时启动。然后只需执行pm2 start ... 后跟pm save。文档:pm2.keymetrics.io/docs/usage/startup
  • 感谢 rudolfbyke -- pm2 start 需要对服务器的 root 访问权限,而共享主机无法获得此权限。事实上,虽然安装了 pm2,但它似乎根本不再起作用,npm 也一样。我假设托管服务提供商——永远向上销售的 VPS 服务——卸载了它,所以我不知道任何节点——在这个与这个特定提供商的共享主机上——会起作用。
  • 只有 pm2 startup 命令需要 root 访问权限,但如果您的提供商有这样的东西,您可以使用 cron 或供应商特定的启动脚本来弥补这一点。我正在使用npm-g_nosudo,在我的共享主机上非常有限的越狱环境中安装“全局”npm 包,并定期确保pm2 仍在使用通过我的提供商的 Web 界面 (ISPConfig) 定义的 cron 脚本运行.

标签: cron sh pm2 nodejs-server


【解决方案1】:

如果像我这样的其他人使用 pm2 进行 Godaddy 共享主机,并使用 Habib 答案的修改版本 pm2 而不是 node,请不要忘记将 node 的路径包含到 PATH 变量中,正如pm2所要求的那样:

PATH=$PATH:/home/user/.nvm/versions/node/v11.15.0/bin
pm2 ps | grep 'my-app'
if [ $? -eq 0 ]; then
  echo "Process running."
else
  echo "Process not running."
  cd /home/user/public_html/app
  pm2 start app.js --name my-app
fi

上面的脚本对我有用。仅指定 pm2 的完整路径不起作用,因为它会在 cron 环境中查找不在 PATH 中的 node

【讨论】:

    【解决方案2】:
    ps cax | grep node > /dev/null
    if [ $? -eq 0 ]; then
      echo "Process running."
    else
      echo "Process not running."
      /home/user/.nvm/versions/node/v11.15.0/bin/node /home/user/public_html/node/app.js
    fi
    

    我在 GoDaddy 共享主机的 cron 作业中使用了它,它对我有用。在此之前,我在同一个脚本中使用了node /home/user/public_html/node/app.js,但由于节点的路径而引发错误。不过,我可以在终端中使用节点,但在 cron 作业中,我必须使用完整路径。

    【讨论】:

    • 感谢 Habib,对我来说,cron 方法行不通,因为托管服务提供商一直试图从 Shared 主机向 VPS 主机追加销售,不允许每分钟都使用 cron 作业。 (他们并没有让这变得容易。此外,他们的追加销售有效,——我购买了 VPS——但我仍然希望能够在共享托管服务上运行一两个节点服务器)我尝试了一种方法使用 tmux,但这也不包含在共享主机中。到目前为止,我在没有 root 访问权限的情况下安装 tmux 的尝试都失败了(Grrr)。再次感谢哈比卜。
    • 我在 GoDaddy 共享主机中使用它,它工作正常。
    • 毫无疑问,这取决于托管服务提供商的限制。
    猜你喜欢
    • 1970-01-01
    • 2019-01-18
    • 1970-01-01
    • 2021-07-20
    • 2018-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多