流程管理工具 PM2

PM2管理器

一、 nodejs

1、 简介

今天介绍一个生产级的流程管理工具 PM2,通常我们说到 PM2 的时候,都是在说如何部署 Node.js 程序,但是实际上 PM2 很强大,不仅仅可以用来管理 Node.js,它还可以用来管理 Python、PHP、Ruby、perl 等等。

这里就以 Python 举例子,来看看 PM2 如何部署管理 Python 脚本。

但是,在部署之前,我们还需要安装nodejs

2、 安装

这里只使用脚本来演示

wget https://nodejs.org/dist/v16.17.0/node-v16.17.0-linux-x64.tar.xz  # 获取压缩包
tar zxvf node-v16.17.0-linux-x64.tar.xz  # 解压缩
cd node-v16.17.0-linux-x64  # 进入安装界面
./configure --prefix=/usr/local/node  # 设置安装路径
make  # 编译
make install  # 安装
cd ..
rm -rf node-v16.17.0-linux-x64*

注意,这里编译安装可能会报错,使得无法安装成功

3、 问题

在编译安装的时候,如果我们的gccg++的版本过低,会无法编译成功

更新gccg++的版本

yum install centos-release-scl  
yum install devtoolset-8-gcc*  # 如果要安装7.的,则devtoolset-7-gcc*
scl enable devtoolset-8 bash  # 激活对应的版本
gcc --version
g++ --version

但是这个激活,只是本次连接暂时的激活,不是永久激活,那么我们应该如何永久激活呢?

  • 使用软链接
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version

然后再进行源码编译,就不会报错啦!

4、 环境变量

vim /etc/profile编译自启动文件,在文件末尾写入

export NODE_HOME=/usr/local/node
export PATH=$NODE_HOME/bin:$PATH

source /etc/profile:修改完成后,重新加载文件,使得修改生效

最后,我们可以使用node -v来检测是否安装成功

Nodejs 官网提供了编译好的 Linux 二进制包,你也可以下载下来直接应用,但是我还是更喜欢自己编译

5、 yum

通过包管理器来安装nodejs

curl -sL https://rpm.nodesource.com/setup_16.x | bash -
yum install nodejs -y

二、 PM2安装

安装完nodejs后,我们就开始进行pm2安装啦

我们使用npm包管理器来安装:

npm install pm2 -g  # 安装
pm2 ls  # 初始化

我们的pm2就安装完成啦

其实这个包的安装是挺简单的,下面让我们一起来看一下如何使用吧!

三、 基本使用

官方文档的位置:https://pm2.keymetrics.io/docs/usage/quick-start/

1、 管理进程

1.1 启动程序

启动任何类型的应用程序,例如 bash 命令、脚本、二进制文件

pm2 start api.js  
pm2 start "npm run start"
pm2 start "ls -la"
pm2 start app.py

传递参数启动

pm2 start api.js --attach  # 启动的同时,检测日志流
pm2 start api.js -- arg1 arg2  # 启动的同时,传递参数给程序

使用配置文件来启动:

关于配置文件的详解,请看官方文档:https://pm2.keymetrics.io/docs/usage/application-declaration/

  • 生成配置文件

    pm2 ecosystem  # or
    pm2 init
    
  • 修改配置文件

    module.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'  //部署后的动作
            }
        }
    
  • 启动程序

    pm2 start ecosystem.config.js --env production
    

1.2 流程

pm2 restart app_name
pm2 reload app_name
pm2 stop app_name
pm2 delete app_name

而不是app_name你可以通过:

  • all对所有进程采取行动
  • id作用于特定的进程 ID

1.3 检测运行状态

列出 PM2 管理的所有应用程序的状态:

pm2 [list|ls|status]

显示日志:

pm2 logs
pm2 logs --lines 200  # 指定输出的日志

仪表盘:

pm2 monit  # 基于终端的仪表板
pm2 plus  # 监控和诊断 Web 界面

1.4 状态保持

使用您在服务器启动/重新启动时管理的进程重新启动 PM2 至关重要。要解决此问题,只需运行此命令以生成活动启动脚本:

pm2 startup
pm2 save

2、 日志管理

pm2 logs            //查看所有应用日志
pm2 logs [Name]    //根据指定应用名查看应用日志
pm2 logs [ID]      //根据指定应用ID查看应用日志
pm2 flush  // 清空日志信息

3、 均衡负载

pm2 serve ./dist 9090        # 静态服务器,将目录dist作为静态服务器根目录,端口为9090
# max 表示PM2将自动检测可用CPU的数量并运行尽可能多的进程
# max可以自定义,如果是4核CPU,设置为2者占用2个
pm2 start app.js -i max

pm2 的常用方法就讲到这了,更详细的功能请到官方文档学习!

posted @ 2022-09-21 22:33  Kenny_LZK  阅读(339)  评论(0编辑  收藏  举报