hello 大家好我是Monday,今天给大家带来一篇关于使用pm2来作为python程序的进程管理的文章。
前言
说到进程管理,后端和运维的同学都不陌生。生产项目以及一些脚本任务都需要进行进程管理。现在市场上用得最多的当属supervisor了,但是它只能运行在 linux 的系统上,也就是说supervisor不能再windows上运行。
我们这里说的是另外一个进程管理工具PM2,PM2不仅仅适用于linux 系统,同样适用于windows系统。这点对于开发者来说也是个福音,下面我们来说说PM2的简单使用。
一、PM2的安装
安装PM2,需要用到nodejs和npm,首先我们来安装nodejs和npm。
- 安装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
测试下是否安装成功。
- 安装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、内存、日志、运行状态等。
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
,然后根据提示设置即可。
结束语:
今天的分享就到这里了,欢迎大家关注微信公众号”菜鸟童靴“