linux nodejs 安装 pm2 及 pm2的常用命令
安装
1. 安装:
npm install pm2 -g
安装完成之后要创建软链接(我自己测试安装时,发现没有创建软链接也是能用的,即下面2、3步不需要)。
2. 用find命令查找pm2安装目录:
find / -name pm2
3. 建立软链接:
ln -s /usr/local/src/app/node-v15.4.0-linux-x64/lib/node_modules/pm2/bin/pm2 /usr/local/bin/
-s 后面的路径就是在步骤2查找到的路径, 后面的 /usr/local/bin/ 不用改.
要注意的是建立软链接的源路径不能是一个文件夹,也就是说,要对应到pm2文件夹里面的pm2,也就是:pm2/bin/pm2
4. 测试安装
查看版本号:
pm2 -v
没有出现pm2 not command. 说明我们配置成功了。
5. 启动服务
pm2 start app.js
执行执行环境参数和启动配置:
1、根目录创建启动文件:ecosystem.config.js
module.exports = { apps: [{ name: 'xxx', script: 'app.js', cwd: './', watch: false, max_memory_restart: '900M', log_date_format: 'YYYY-MM-DD HH:mm:ss', error_file: '/root/xxx/logs/xxx.error.log', out_file: '/root/xxx/logs/xxx.out.log', merge_logs: true, env: { NODE_ENV: 'prod', RUN_ENV: 'prod', }, env_prod: { NODE_ENV: 'prod', RUN_ENV: 'prod', }, env_dev: { NODE_ENV: 'dev', RUN_ENV: 'dev', }, watch: ['xxx'], // 这个应该是表示热重启,即监控代码变化后,自动重启用的(xxx和上面的name必须一致?) 待测试 ignore_watch: ['node_modules', 'logs', 'build'], }] };
2、启动命令
3.查看版本 pm2 -v
4.查看启动的列表 pm2 list
5.关闭 pm2 stop id|name
6.pm2 show server 查看运行情况
7.重载 pm2 reload server (前提是启动时指定了name为server)
ps:reload 可以实现0秒宕机加载新代码
8.重启 pm2 restart server(前提是启动时指定了name为server)
ps:重新启动
9.开发中使用 pm2 start server.js --name server --watch (如果在server.js中已经配置了name, 则--name可以不需要,如果在配置文件配置了watch,--watch是否也可以不需要?[待验证])
ps:修改代码无需重启,自动更新,相同功能的插件有supervisor
10.监控 pm2 monit
常用命令
npm install pm2 -g
//安装pm2
cd {项目目录}
pm2 start
"vendors/server/app.js"
--name yapi
//pm2管理yapi服务
pm2 info yapi
//查看服务信息(这个可以看到日志在哪个位置)
pm2 stop yapi
//停止服务
pm2 restart yapi
//重启服务
之前在wnidows上直接使用 pm2 start *.js --name *** 的方式在后台服务启动后(不显示窗体),不知道到底执行成功没有,也不知道日志在哪里,后来通过 pm2 info yapi 找到了日志目录。
E:\etc\.pm2\logs
坑
1、在windows中使用了任务计划,并使用了Sytem角色来执行pm2启动脚本。在终端查看pm2状态时[pm2 list],报错:
connect EPERM //./pipe/rpc.sock [PM2] Spawning PM2 daemon with pm2_home=C:\Users\Administrator\.pm2 events.js:291 throw er; // Unhandled 'error' event ^ Error: connect EPERM //./pipe/rpc.sock at PipeConnectWrap.afterConnect [as oncomplete] (net.js:1145:16) Emitted 'error' event on ReqSocket instance at: at Socket.<anonymous> (D:\nodejs\node_global\node_modules\pm2\node_modules\pm2-axon\lib\sockets\sock.js:201:49) at Socket.emit (events.js:314:20) at emitErrorNT (internal/streams/destroy.js:106:8) at emitErrorCloseNT (internal/streams/destroy.js:74:3) at processTicksAndRejections (internal/process/task_queues.js:80:21) { errno: -4048, code: 'EPERM', syscall: 'connect', address: '//./pipe/rpc.sock' }
经查,是因为我启动的角色问题,然后使用管理员身份打开cmd,再执行,即正常了。