0%

守护进程管理工具Pm2

简介

PM2是一个守护进程管理工具,帮助您管理和守护您的应用程序。它以简单直观的 CLI 命令行方式进行工作。

下载安装

最新的 PM2 版本可以使用 NPMYarn 安装:

1
2
3
4
5
# npm
npm install pm2@latest -g
# yarn
yarn global add pm2
# 二选一即可

建议使用npm安装,如果没有请自行百度安装。

输入pm2 -V打印PM2版本。

image-20240621230443094

快速使用

首先,使用Flask构建一个简单的应用,代码如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
return "PM2测试页面"


if __name__ == "__main__":
app.run(host="0.0.0.0", port=2323)

普通启动

1
python app.py

image-20240623154802139

应用启动完成。

使用PM2命令启动项目

1
pm2 start python app.py

开启前,请先停止上方普通启动的程序。

image-20240623155352832

查看网页是否可以开启。

image-20240623155421933

测试成功。

使用PM2配置文件启动项目

使用 PM2 管理多个应用程序时,使用一个 JS 配置文件来组织它们。

首先,停止前面使用PM2开启的项目。

1
2
pm2 stop app
pm2 stop python

image-20240623155734905

停止完成。

首先使用以下命令,可以生成一个PM2示例配置文件。

1
pm2 init simple

image-20240623160152628

接下来修改应名称、脚本和解释器的绝对路径。

1
2
3
4
5
6
7
module.exports = {
apps : [{
name : "test_web",
script : "app.py",
interpreter : "D:/ProgramSoftware/Python/Miniconda3/python.exe"
}]
}

启动项目。

1
pm2 start ecosystem.config.js

image-20240623160515502

验证网页是否成功开启。

image-20240623160554971

成功启动。

与操作应用程序相比,您可以无缝启动/停止/重启/删除配置文件中包含的所有应用程序:

例如,我们将app.py文件重新拷贝一份为app1.py文件,并将app1.py应用的端口修改为2324,输出的文本内容修改为PM2测试页面2222,然后在配置文件中同时启动这两个应用。

具体如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
return "PM2测试页面2222"


if __name__ == "__main__":
app.run(host="0.0.0.0", port=2324)

接着修改PM2配置文件,将app1加到配置文件中。

1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
apps : [{
name : "test_web",
script : "app.py",
interpreter : "D:/ProgramSoftware/Python/Miniconda3/python.exe"
},
{
name : "test_web2",
script : "app1.py",
interpreter : "D:/ProgramSoftware/Python/Miniconda3/python.exe"
}]
}

首先删除前面,使用配置文件已经生成的应用。

1
pm2 delete ecosystem.config.js

image-20240623161531018

接着再次启动PM2

1
pm2 start ecosystem.config.js

此时会同时启动test_webtest_web2项目。

image-20240623161547474

查看测试页面。

test_web

image-20240623161630621

test_web2

image-20240623161648680

启动完成。

管理应用

进程检查

列出应用程序

1
pm2 ls/status/list

此处lsstatuslist三个命令的效果相同。

image-20240623161837913

查看日志

1
pm2 log

image-20240623161925930

当日志数过多时,也可以指定查看的日志行数。

例如,查看最新的200行日志。

1
pm2 logs --lines 200

清空所有日志文件

1
pm2 flush

重新加载所有日志

1
pm2 reloadLogs

查看监控信息

查看每个应用的实时监控信息(但是无法查看历史监控信息)

1
pm2 monit

image-20240623162248311

监控和诊断Web界面

基于 Web 的仪表板,带有诊断系统的跨服务器。

1
pm2 plus

image-20240623162800238

ecosystem配置文件

基本使用

在使用配置文件管理应用时,除了可以前面使用到的批量启动应用之外,还有以下命令可以使用。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 启动配置文件中的所有项目
pm2 start ecosystem.config.js

# 停止配置文件中的所有项目
pm2 stop ecosystem.config.js

# 重启配置文件中的所有项目
pm2 restart ecosystem.config.js

# 重载配置文件中的所有项目
pm2 reload ecosystem.config.js

# 删除配置文件中的所有项目
pm2 delete ecosystem.config.js

还可以使用其名称和选项对特定应用程序进行操作--only <app_name>

1
pm2 stop ecosystem.config.js --only tset_web

--only选项也适用于启动/重启/停止/删除。

甚至可以通过指定用逗号分隔每个应用程序名称,来指定要对其执行操作的多个应用程序:

1
pm2 start ecosystem.config.js --only "test_web,test_web2"

更多使用参数请见官网进行配置。

环境变量

您可以通过该env_*选项指定不同的环境变量。

1
2
3
4
5
6
7
8
9
10
11
12
module.exports = {
apps : [{
name : "app1",
script : "./app.js",
env_production: {
NODE_ENV: "production"
},
env_development: {
NODE_ENV: "development"
}
}]
}

现在要在不同环境中的变量之间切换,请指定--env [env name]选项:

1
2
pm2 start ecosystem.config.js --env production
pm2 restart ecosystem.config.js --env development

开启启动

启动

1
pm2 startup

禁止开机启动

1
pm2 unstartup

保存

1
pm2 save

应用监听

--watch选项很简单:

1
pm2 start env.js --watch --ignore-watch="node_modules"

这将在当前目录 + 所有子文件夹中的任何文件更改时监视并重新启动应用程序,并且它将忽略 node_modules 文件夹中的任何更改--ignore-watch="node_modules"

然后,您可以使用pm2 logs来检查重新启动的应用程序日志。

更新PM2

全局安装新最版本的PM2:

1
npm install pm2@latest -g

然后更新内存中的 PM2

1
pm2 update

命令列表

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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Fork 模式
pm2 start app.js --name my-api # 程序名

# Cluster 模式
pm2 start app.js -i 0 # 将根据可用的 CPU 使用 LB 启动最大进程
pm2 start app.js -i max # 和上面一样,但是不推荐使用。
pm2 scale app +3 # Scales `app` up by 3 workers
pm2 scale app 2 # Scales `app` up or down to 2 workers total

# Listing

pm2 list # 显示所有进程状态
pm2 jlist # 以原始JSON格式打印进程列表
pm2 prettylist # 以美化的JSON格式打印进程列表

pm2 describe 0 # 显示指定进程的所有信息

pm2 monit # 监控所有进程

# Logs

pm2 logs [--raw] # 在流中显示所有进程日志
pm2 flush # 清空所有日志文件
pm2 reloadLogs # 重新加载所有日志

# Actions

pm2 stop all # 停止所有进程
pm2 restart all # 重启所有进程

pm2 reload all # 将 0s 宕机机时间重新加载(对于 NETWORKED 应用程序)

pm2 stop 0 # 停止指定进程id
pm2 restart 0 # 重启指定进程id

pm2 delete 0 # 将进程从pm2列表中删除
pm2 delete all # 将从pm2列表中删除所有进程

# Misc

pm2 reset <process> # 重置元数据(重启时间…)
pm2 updatePM2 # 在内存中更新pm2
pm2 ping # 确保pm2守护进程已经启动
pm2 sendSignal SIGUSR2 my-app # 向脚本发送系统信号
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart
-------------本文结束感谢您的阅读-------------