关于pm2的简单教程
// install
npm install pm2 -g
启动pm2 start ./src/bin/www.js ,
但是用apifox调用的时候发现接口访问失败了,执行pm2 logs看看日志
0|www | /Users/dongzhiqin/myProjects/node-server/src/bin/www.js:10
0|www | import app from '../app'
0|www | ^^^^^^
0|www |
0|www | SyntaxError: Cannot use import statement outside a module
0|www | at Object.compileFunction (node:vm:352:18)
0|www | at wrapSafe (node:internal/modules/cjs/loader:1033:15)
0|www | at Module._compile (node:internal/modules/cjs/loader:1069:27)
0|www | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
0|www | at Module.load (node:internal/modules/cjs/loader:981:32)
0|www | at Function.Module._load (node:internal/modules/cjs/loader:822:12)
0|www | at Object.<anonymous> (/Users/dongzhiqin/.nvm/versions/node/v16.16.0/lib/node_modules/pm2/lib/ProcessContainerFork.js:33:23)
0|www | at Module._compile (node:internal/modules/cjs/loader:1105:14)
0|www | at Object.Module._extensions..js (node:internal/modules/cjs/loader:1159:10)
0|www | at Module.load (node:internal/modules/cjs/loader:981:32)
是因为我在项目中使用了es6语法,pm2无法识别,修改为dist文件夹内的路径(前提必须执行编译)
pm2 start ./dist/bin/www.js
pm2 list 查看进程
⇆ PM2+ activated | Instance Name: dongzhiqins-MacBook-Pro.local-b3a4 | Dash: https://app.pm2.io/#/r/guazsb3bmbmmdkn
┌────┬────────┬─────────────┬─────────┬─────────┬──────────┬────────┬──────┬───────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name │ namespace │ version │ mode │ pid │ uptime │ ↺ │ status │ cpu │ mem │ user │ watching │
├────┼────────┼─────────────┼─────────┼─────────┼──────────┼────────┼──────┼───────────┼──────────┼──────────┼──────────┼──────────┤
│ 2 │ www │ default │ 0.0.0 │ fork │ 0 │ 0 │ 15 │ errored │ 0% │ 0b │ don… │ disabled │
│ 3 │ www │ default │ 0.0.0 │ fork │ 25300 │ 0s │ 0 │ online │ 0% │ 1.2mb │ don… │ disabled │
└────┴────────┴─────────────┴─────────┴─────────┴──────────┴────────┴──────┴───────────┴──────────┴──────────┴──────────┴──────────┘
id为2的进程是出错的,删除掉pm2 delete 2 ,id为3是正常运行的进程。
修改package.json的脚本,"server:prod" : "node ./dist/bin/www" 修改为
"server:prod": "pm2 start ./dist/bin/www.js"
如果不喜欢pm2 start ./dist/bin/www.js这种书写方式,也可以指定一个执行文件
创建ecosystem.config.js
module.exports={
apps: [
{
name: 'node-server',
script: "./bin/www.js",
cwd: "./dist"
}
]
}
在根目录下执行pm2 start ecosystem.config.js
服务已经正常启动了,查看端口使用情况lsof -i tcp:3000
(base) ➜ node-demo git:(master) ✗ lsof -i tcp:3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node 34791 dongzhiqin 23u IPv6 0x3690a130995da763 0t0 TCP *:hbci (LISTEN)
(base) ➜ node-demo git:(master) ✗
参数说明
--watch:监听应用目录的变化,一旦发生变化,自动重启。如果要精确监听、不见听的目录,最好通过配置文件。-i --instances:启用多少个实例,可用于负载均衡。如果-i 0或者-i max,则根据当前机器核数确定实例数目。--ignore-watch:排除监听的目录/文件,可以是特定的文件名,也可以是正则。比如--ignore-watch="test node_modules "some scripts""-n --name:应用的名称。查看应用信息的时候可以用到。-o --output <path>:标准输出日志文件的路径。-e --error <path>:错误输出日志文件的路径。--interpreter <interpreter>:the interpreter pm2 should use for executing app (bash, python...)。比如你用的coffee script来编写应用。
pm2 start app.js -i 3 # 开启三个进程
pm2 start app.js -i max # 根据机器CPU核数,开启对应数目的进程