关于pm2命令的使用指南
前言
在Node.js项目中,进程管理是一个重要的部分。pm2
是一个非常流行的Node.js进程管理工具,它可以帮助我们管理和监控Node.js应用的运行状态。本文将介绍 pm2
的安装和基本使用方法,更好地管理Node.js项目。
ps:博主经常喜欢折腾些小玩意,用的是自己的服务器。但是在部署这些小玩意的时候,启动后要持久化,由于有些小玩意并不支持自带的命令,所以就写了一个关于pm2命令的使用指南,方便以后使用。
介绍
【PM2官方网站 | Github】pm2
是一个Node.js进程管理器,专为生产环境下的应用程序设计。
- 提供了进程守护、负载均衡、日志管理、性能监控等功能。它允许你轻松地启动、停止、重启和监控Node.js应用程序,并提供了友好的命令行接口和强大的API。
- 它可以自动重启崩溃的应用,支持负载均衡,还提供了详细的日志管理和监控功能。
pm2
使得Node.js应用的部署和管理变得更加简单和高效。
安装
在Linux系统上安装 pm2
非常简单,只需执行以下命令1
2
3
4
5# 使用npm全局安装PM2
npm install pm2 -g
# 验证成功
pm2 --version
启动应用
启动一个Node.js应用非常简单,只需运行以下命令1
pm2 start app.js
常用命令
1 | # 列出所有进程 |
基础命令
名称 | 描述 |
---|---|
pm2 list | 列出所有进程 |
pm2 start [应用名] | 启动应用程序 |
pm2 stop [应用ID或应用名] | 停止应用程序 |
pm2 restart [应用ID或应用名] | 重启应用程序 |
pm2 delete [应用ID或应用名] | 删除应用程序 |
pm2 logs | 查看所有应用程序日志 |
pm2 logs [应用ID或应用名] | 查看应用程序日志 |
pm2 flush | 清空日志信息 |
pm2 monit | 监控所有进程的实时状态 |
pm2 save | 保存当前的进程列表,以便在服务器重启后恢复 |
pm2 reload [应用ID或应用名] | 重载指定的应用程序,通常用于无停机重启 |
pm2 resurrect | 恢复之前保存的进程列表 |
pm2 ecosystem 或 pm2 init |
生成示例配置文件 |
均衡负载
- 静态服务器,将目录
dist
作为静态服务器根目录,端口为90901
pm2 serve ./dist 9090
- max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程,max可以自定义,如果是4核CPU,设置为2者占用2个
1
pm2 start app.js -i max
示例配置文件
使用pm2 ecosystem
或pm2 init
命令生成的配置文件ecosystem.config.js
1
pm2 start ecosystem.config.js --env production
ecosystem.config.js
内容如下1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30module.exports = {
apps : [{
name : 'API', //应用名
script : 'app.js', //应用文件位置
env: {
PM2_SERVE_PATH: ".", //静态服务路径
PM2_SERVE_PORT: 8080, //静态服务器访问端口
NODE_ENV: 'development' //启动默认模式
},
env_production : {
NODE_ENV: 'production' //使用production模式 pm2 start ecosystem.config.js --env production
},
instances:"max", //将应用程序分布在所有CPU核心上,可以是整数或负数
watch:true, //监听模式
output: './out.log', //指定日志标准输出文件及位置
error: './error.log', //错误输出日志文件及位置,pm2 install pm2-logrotate进行日志文件拆分
merge_logs: true, //集群情况下,可以合并日志
log_type:"json", //日志类型
log_date_format: "DD-MM-YYYY", //日志日期记录格式
}],
deploy : {
production : {
user : 'node', //ssh 用户
host : '212.83.163.1', //ssh 地址
ref : 'origin/master', //GIT远程/分支
repo : 'git@github.com:repo.git', //git地址
path : '/var/www/production', //服务器文件路径
post-deploy : 'npm install && pm2 reload ecosystem.config.js --env production' //部署后的动作
}
}
博主示例
列举几个博主正在使用的例子
- hexo_run.js
1
2
3
4
5
6
7
8
9
10//run
const { exec } = require('child_process')
exec('hexo server -p 8000',(error, stdout, stderr) => {
if(error){
console.log('exec error: ${error}')
return
}
console.log('stdout: ${stdout}');
console.log('stderr: ${stderr}');
}) - hugo_run.js
1
2
3
4
5
6
7
8
9
10
11//run
const { exec } = require('child_process');
exec('hugo server --bind 0.0.0.0 --port 1313 --baseURL http://nav.renyuxin.cn', (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return;
}
console.log(`stdout: ${stdout}`);
console.log(`stderr: ${stderr}`);
});