0%

使用pm2进程管理工具管理python项目

hello 大家好我是Monday,今天给大家带来一篇关于使用pm2来作为python程序的进程管理的文章。

前言

说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 linux 的系统上,也就是说supervisor不能再windows上运行。

我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于linux 系统,同样适用于windows系统。这点对于开发者来说也是个福音,下面我们来说说PM2的简单使用。

一、PM2的安装

安装PM2,需要用到nodejs和npm,首先我们来安装nodejs和npm。

  1. 安装nodejs和npm
1
2
3
4
5
6
7
8
9
10
11
shell复制代码# 下载指定版本的nodejs,这里我们安装node14.17版本
wget https://nodejs.org/dist/v14.17.3/node-v14.17.3-linux-x64.tar.xz
# 加压安装包
tar xvf node-v14.17.3-linux-x64.tar.xz
# 重命名
mv node-v14.17.3-linux-x64 node
# 移动到/usr/local
mv node /usr/local
# 制作软连接
ln -s /usr/local/node/bin/node /usr/bin/node
ln -s /usr/local/node/bin/npm /usr/bin/npm

安装好nodejs和npm后,运行下node -v测试下是否安装成功。

  1. 安装pm2
1
2
3
4
npm install pm2 -g

# 制作软连接
ln -s /usr/local/node/bin/pm2 /usr/bin/pm2

安装好之后,输入pm2 -v查看版本。

二、PM2的使用

1、启动应用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 支持不同文件格式
pm2 start app.js
pm2 start bashscript.sh
pm2 start python-app.py
pm2 start binary-file
pm2 start "npm run start"
pm2 start "ls -la"
pm2 start app.py

# 设置启动应用的显示名称
pm2 start app.js --name <app_name>

# 监控应用目录,一旦有文件发生更改就立刻重启应用
pm2 start app.js --watch

# 设置应用重启时,能使用内存的最大值
pm2 start app.js --max-memory-restart <200MB>

# 启动时,传递参数给 app 应用
pm2 start app.js -- arg1 arg2 arg3

# 禁止自动重启应用
pm2 start app.js --no-autorestart
2、重启、重载、停止、删除
1
2
3
4
5
6
7
8
9
10
pm2 restart app_name|app_id|all
pm2 reload app_name|app_id|all
pm2 stop app_name|app_id|all
pm2 delete app_name|app_id|all

pm2 restart app.js
pm2 restart app1 app3 app4

# 重置 restart 的计时器
pm2 reset all
3、查看运行状态
1
2
3
4
5
6
7
8
9
10
11
# 查看所有进程信息(app_name、app_id等)
pm2 [list|ls|status]

# 对应用进行排序查看
pm2 list --sort name:desc
# Or
pm2 list --sort [name|id|pid|memory|cpu|status|uptime][:asc|desc]

# 查看某个应用详情
pm2 describe app_name|app_id
pm2 show api
4、显示仪表盘

在终端上显示仪表盘,展示所有应用的信息:cpu、内存、日志、运行状态等。

1
pm2 monit
5、查看 PM2 所有命令说明
1
2
3
查看所有命令
pm2 --help
pm2 -h

三、启动自己的项目

fastapi项目启动入口如下

1
2
3
4
5
6
7
8
# -*- coding: utf-8 -*-
import sys
sys.path.append(".")
from src.webapp import app

if __name__ == '__main__':
import uvicorn
uvicorn.run('bin.webapp:app', reload=True, host='0.0.0.0', port=10005)

使用PM2命令启动项目:

1
pm2 start 'gunicorn -b 0.0.0.0:10005 -w 32 -t 180 -k uvicorn.workers.UvicornWorker bin.webapp:app'

四、配置pm2启动脚本

我们在运行一个python应用时,通常要指定python虚拟环境、传递额外参数、设置日志路径等。如果都将配置在命令行上写,不仅不方便输入,而且不便于管理。这时我们可以用到以配置文件启动的方式来处理。

以json配置文件启动

命令:pm2 start config.json 还是以上述test.py为例,我们此时启动该程序要求:

  • 指定程序路径
  • 指定python虚拟环境
  • 指定日志输出路径
  • 不要自动重启

为了满足上述需求,我们首先来看看json配置文件的主要参数

1
2
3
4
5
6
7
8
9
10
11
12
# 主要参数
name: 任务名称
script: 脚本路径
cwd: 程序目录
args: 额外参数
interpreter: 虚拟环境

# 其他参数
watch: 是否监控文件改动重启
error_file: 错误日志路径
out_file: 正常输入日志路径
autorestart:是否要自动重启

根据参数,我们来写运行配置文件pm2.json

1
2
3
4
5
6
7
8
9
{
"name": "test_pm2_101",
"cwd": "/Users/ethan/Desktop/test/pm2_test",
"script": "/Users/ethan/Desktop/test/pm2_test/test.py",
"interpreter": "/Users/ethan/miniconda3/envs/data_manage/bin/python",
"out_file": "/Users/ethan/Desktop/test/pm2_test/log.log",
"error_file": "/Users/ethan/Desktop/test/pm2_test/error.log",
"autorestart" : false
}

设置pm2自启动

最后讲一下pm2的自启动设置,没设置前,服务器重启后,pm2是不会自动重启的,因此我们的应用需重新启动了。

设置方法很简单,输入pm2 startup,然后根据提示设置即可。

结束语

​ 今天的分享就到这里了,欢迎大家关注微信公众号”菜鸟童靴

图片