如何在Plesk 17.5中Git自动部署后自动重启Node应用?
解决Plesk 17.5中Git自动部署后自动重启Node.js应用的问题
我之前也碰到过一模一样的情况——直接在后置命令里塞npm start完全没用,因为Plesk是靠自身的进程管理器来托管Node应用的,手动跑npm start只会启动一个独立的临时进程,和Plesk后台监控的旧进程根本不搭边。下面给你几个靠谱的解决方案:
方法1:用Plesk官方命令行工具重启应用
这是最稳妥的方式,直接调用Plesk内置命令来精准重启指定的Node应用:
- 先确认你的应用标识:在Plesk控制台找到你的Node应用,它的格式通常是
你的域名/应用名称(比如example.com/my-node-blog) - 进入Git部署设置页面,找到「Post-deployment action」(后置部署动作),填入以下命令:
举个实际例子:plesk bin nodejs --restart <你的应用标识>plesk bin nodejs --restart example.com/my-node-blog - 保存设置后推送一次新提交测试,现在应用应该会自动完成重启,新代码也能即时生效了。
方法2:通过进程信号触发Plesk托管进程重启
如果方法1无效,你可以尝试用进程信号来触发重启。Plesk会给托管的Node进程自动设置环境变量PLESK_NODEJS_APP_PID,记录当前进程ID,你可以发送SIGUSR2信号(大多数Node框架都支持这个信号实现热重启):
在后置部署动作里填入:
kill -SIGUSR2 $PLESK_NODEJS_APP_PID
注意:如果你的应用没处理
SIGUSR2信号,也可以尝试SIGTERM信号——它会直接终止旧进程,Plesk的进程管理器会自动重启应用,同样能加载新代码。
补充:为什么npm start没用?
再啰嗦下核心原因:Plesk的Node应用托管是后台持续运行的,它会维护自己的进程实例。你在后置命令里执行npm start,只是在部署脚本的临时上下文里启动了一个新进程,这个进程不会被Plesk监控,而且原来的旧进程还在跑,用户访问的自然还是旧代码。必须通过Plesk官方的方式来重启它托管的进程,才能让新代码生效。
内容的提问来源于stack exchange,提问作者7ahid
相关产品推荐
相关产品推荐

