通过Bitbucket Pipeline部署至AWS时,如何异步启动Node服务器?
解决Node服务器阻塞导致部署超时的方案
方案1:用nohup后台启动(快速解决)
修改启动脚本的最后一行,将npm start替换为:
nohup npm start > /var/log/node-app.log 2>&1 &
nohup:让进程脱离当前终端,即使脚本执行完毕退出,Node进程也能继续运行> /var/log/node-app.log:将服务器的标准输出重定向到指定日志文件,方便后续排查问题2>&1:将错误输出也同步到上述日志文件中&:将进程放到后台运行,让脚本立即继续执行并退出
方案2:使用进程管理器(生产环境推荐)
如果是生产环境,更推荐用pm2这类进程管理工具,它能自动重启崩溃的进程,还方便监控:
- 先在EC2实例上安装pm2(可整合到部署脚本中):
npm install -g pm2
- 修改启动脚本的最后一行:
pm2 start npm -- start
若有PM2配置文件(如ecosystem.config.js),可直接用:
pm2 start ecosystem.config.js
pm2启动进程后会立即退出脚本,不会阻塞CodeDeploy钩子,同时还能提供进程监控、日志管理等功能。
额外注意事项
- 确保日志目录
/var/log存在,或替换为你有权限写入的目录 - 若用root用户运行,需注意pm2全局安装路径的权限问题
- 可在启动命令后追加
disown,确保进程完全脱离脚本的控制终端:
nohup npm start > /var/log/node-app.log 2>&1 & disown
内容的提问来源于stack exchange,提问作者Yossi G.
相关产品推荐
相关产品推荐

