如何用PM2运行Express-Generator生成的应用及配置调整
用PM2运行Express Generator应用的正确姿势
我来帮你捋清楚具体的操作方法,顺便解决你遇到的进程没出现在pm2 monit里的问题:
一、最简单的直接启动方式(开发环境快速验证)
直接在项目根目录执行这条命令,就能让应用正常启动并出现在pm2监控列表里:
DEBUG=myapp:* pm2 start ./bin/www --name "myapp"
DEBUG=myapp:*:把原来启动命令里的环境变量带上,确保Express的调试日志能正常输出--name "myapp":给你的进程起个好记的名字,后续重启、查看日志等管理操作更方便
执行完后,再跑pm2 monit就能看到这个进程了,用pm2 list也能快速查看进程状态。
二、推荐用PM2配置文件管理(生产环境首选)
如果是生产环境,或者需要固定配置项,最好写一个PM2配置文件,后续维护会省心很多。
在项目根目录创建ecosystem.config.js文件,内容如下:
module.exports = { apps: [ { name: "myapp", // 自定义进程名称 script: "./bin/www", // 要启动的脚本路径,和原npm start指向的文件一致 env: { NODE_ENV: "development", DEBUG: "myapp:*" // 开发环境的DEBUG变量配置 }, env_production: { NODE_ENV: "production", DEBUG: "myapp:*" // 生产环境如果需要调试日志就保留,不需要可直接删除 } } ] }
启动时根据环境选择命令:
- 开发环境:
pm2 start ecosystem.config.js - 生产环境:
pm2 start ecosystem.config.js --env production
所有配置都存在文件里,不用每次敲一大串命令,后续重启、重载也只需要针对这个配置文件操作即可。
三、你之前的问题出在哪?
你把package.json里的start脚本改成pm2 start ./bin/www后,运行npm start时,pm2是作为npm的子进程启动的。pm2的监控工具默认只会追踪直接通过pm2命令启动的进程,这种嵌套启动的进程不会被正常识别,所以你在pm2 monit里看不到它。
如果非要通过npm脚本启动(比如CI/CD流程要求),可以修改成这样,但还是不推荐这种嵌套方式:
"scripts": { "start": "DEBUG=myapp:* pm2 start ./bin/www --name myapp", "stop": "pm2 stop myapp", "restart": "pm2 restart myapp", "test": "mocha --timeout 10000" }
四、常用PM2命令小总结
- 查看所有进程:
pm2 list - 实时监控进程状态:
pm2 monit - 查看应用日志:
pm2 logs myapp(指定进程名)或者pm2 logs查看所有日志 - 重启进程:
pm2 restart myapp - 停止进程:
pm2 stop myapp - 删除进程:
pm2 delete myapp
内容的提问来源于stack exchange,提问作者MikZuit
相关产品推荐
相关产品推荐

