【发布时间】: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