写点什么

用 PM2 做 Python 进程管理也太好用了吧

  • 2022-10-17
    广东
  • 本文字数:1807 字

    阅读完需:约 1 分钟

前言

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


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

一、PM2 的安装

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


  1. 安装 nodejs 和 npm


# 下载指定版本的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/localmv node /usr/local# 制作软连接ln -s /usr/local/node/bin/node /usr/bin/nodeln -s /usr/local/node/bin/npm /usr/bin/npm
复制代码


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


  1. 安装 pm2


npm install pm2 -g
# 制作软连接ln -s /usr/local/node/bin/pm2 /usr/bin/pm2
复制代码


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

二、PM2 的使用

我们主要介绍下 PM2 如何管理 python 程序,这里我们新建一个简单的 python 文件test.py,代码如下:


def add_func(a, b):    sums = a + b    return sums
a = 1b = 2print(add_func(a, b))
复制代码


我们用 PM2 启动一下看看,输入pm2 start 'python test.py'


如下图,启动后我们可以看到日志里代码运行了多次,这是为什么呢?下面我们先来介绍 pm2 常用的一些操作吧。



PM2 的常用操作

  1. 启动一个应用: pm2 start test.py另外,我们可以在启动应用时添加相关参数:


# 给这个任务起名--name {job_name} 或者 -n {job_name}
# 文件更新时自动重启任务--watch
# 开启多进程-i {num}
# 设置应用重新加载的内存阈值--max-memory-restart <200MB>
# 定义日志路径--log {log_path}
# 脚本额外参数-- arg1 arg2 arg3
# 不要自动重启应用--no-autorestart
# 设置cron定时任务--cron {定时表达式}
复制代码


从以上参数我们得知,应用默认会自动重启应用。如果我们不要自动重启,就要加上--no-autorestart参数。


我们加上参数测试一下,pm2 start test.py --no-autorestart。这时我们看到应用就只运行了一次。



  1. 查看应用状态输入pm2 status或者pm2 ls查看任务列表。

  2. 重启应用输入pm2 restart {id}或者pm2 reload {name}


备注:{id}指的是 pm2 任务 ID,{name}指的是 pm2 任务的名称。下面例子都用{id}。


  1. 查看应用日志输入pm2 logs {id}

  2. 停止应用输入pm2 stop {id}

  3. 删除应用输入pm2 delete {id}

  4. 查看应用详情输入pm2 describe {id}



以上就是 pm2 的常用操作,下面主要介绍下 python 程序的启动配置。

配置 pm2 启动脚本

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

以 json 配置文件启动

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


  • 指定程序路径

  • 指定 python 虚拟环境

  • 指定日志输出路径

  • 不要自动重启


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


# 主要参数name:   任务名称script: 脚本路径cwd:    程序目录args:   额外参数interpreter: 虚拟环境
# 其他参数watch: 是否监控文件改动重启error_file: 错误日志路径out_file: 正常输入日志路径autorestart:是否要自动重启
复制代码


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


{    "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 start pm2.json。查看下日志:pm2 logs ,大功告成。



设置 pm2 自启动

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


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

小结

本文主要讲了使用 pm2 来作为 python 程序的进程管理,pm2 轻量简单,适合后端快速部署应用,大家都用起来吧。

发布于: 刚刚阅读数: 4
用户头像

还未添加个人签名 2020-06-16 加入

还未添加个人简介

评论

发布
暂无评论
用PM2做Python进程管理也太好用了吧_进程_芥末拌个饭吧_InfoQ写作社区