为何AWS EC2的ApplicationStart钩子中需同时用PM2与Node/NPM启动项目?
为什么教程里同时用Node/NPM和PM2启动项目?能不能只用PM2?
完全可以只用PM2启动你的Node.js项目,那些同时执行两种启动命令的写法要么是教程作者的疏漏,要么是没搞懂PM2的核心作用——PM2本身就是用来替代直接node/npm start的进程管理工具,重复启动完全没必要,还会引发问题:
为什么重复启动是错误的?
- 直接执行
npm start或node app.js &的进程会脱离PM2管控:崩溃后不会自动重启,PM2的日志、监控功能也覆盖不到它,等于白用了PM2。 - 要是
npm start没加后台符&,在AWS ApplicationStart钩子中执行会阻塞整个钩子流程,导致部署后续步骤无法完成。 - 两个独立进程同时运行,会占用双倍内存和CPU资源,纯属于浪费。
正确的AWS EC2钩子写法(只用PM2)
根据你的项目情况选一种即可:
- 通过npm脚本启动(如果
package.json里定义了start脚本):
pm2 start npm --name "covidapp" -- start
- 直接启动入口文件:
pm2 start app.js --name "myApp"
- 关键步骤:确保EC2重启后PM2自动恢复进程
执行启动命令后必须加这两句,否则EC2重启后项目会停止运行:
pm2 save pm2 startup
pm2 save会保存当前PM2管理的进程列表,pm2 startup会配置系统服务,让PM2在EC2开机时自动启动并恢复之前的进程。
额外提醒
- PM2自带日志管理,不用手动写
> app.out.log 2> app.err.log,默认日志在~/.pm2/logs/目录下,也可以通过pm2 logs实时查看。 - AWS ApplicationStart钩子只在部署(比如CodeDeploy部署)时执行一次,所以必须配置PM2自启,才能保证EC2重启后项目持续运行。
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

