PM2的基本使用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PM2的基本使用相关的知识,希望对你有一定的参考价值。

参考技术A PM2 是一款非常优秀的 Node 进程管理工具,它有着丰富的特性:能够充分利用多核 CPU
且能够负载均衡、能够帮助应用在崩溃后、指定时间(cluster model)和超出最大内存限制
等情况下实现自动重启。

PM2 是开源的基于 Nodejs 的进程管理器,包括守护进程,监控,日志的一整套完整的功能

查看版本好,确定是否安装成功

通过pm2启动应用程序服务,守护进程

示例:

多个应用程序

通过pm2启动应用程序
启动第一个应用程序

启动第而个应用程序

启动是否能正常运行程序

我们发现两个进程都可以正常访问,我们会发现两个进程都叫app,甚至都不太好区分谁是谁

因此我们在启动程序的时候,可以自定义命名

上面的示例中,两个进程都是同一个名字,都不太好区分,启动第三个程序时修改进程名称

结果:

通过pm2停止正在运行的程序

现在可以停止进程

通过进程名关闭进程

通过进程id关闭进程

结果

all是关闭所有的进程

访问结果:

restart命令同时杀死并重启所有进程。短时间内服务不可用。生成环境推荐使用reload

重新启动所有进程,始终保持至少一个进程在运行

删除应用程序,就是不在让pm2维护这个应用程序

通过进程名删除进程

通过进程id删除进程

查看进程状态

查看进程日志

pm2基本使用

1.pm2的基本介绍

pm2是node的进程管理器,利用它可以简化node任务的管理,且内置了许多功能,常用于后台脚本管理。

pm2特性

  • 自带热部署 - - - 当源文件更新 线上项目也会自动重启
  • 后台运行 - - - 不会占用实时窗口 会在后台运行
  • 服务信息查看 - - - 查看运行中程序的各项信息
  • 日志系统 - - - 可以随时查看程序的运行日志
  • 内置负载均衡 - - - 在cluster模式会自动使用轮询的方式达到负载均衡的效果
  • 多平台支持 - - - 在linux windows macOS 上都可以稳定的运行
  • 最大内存重启 - - - 可以设置最大内存限制超过限制则会自动重启;
    还有很多的特性 咱就不一一举例了感兴趣的朋友可以去官网查看学习 小的这就献上官网地址 官网地址

2.pm2的安装

// 这里我使用npm进行pm2的全局安装
$ npm install -g pm2

// 安装完成后可以使用  -v 参数 查看pm2的版本 检测是否安装成功
$ pm2 -v

3.pm2的基本使用

// 第一条要介绍的是pm2的启动命令
$ pm2 start [项目入口文件名]

这里我使用一个 node.js内置的http模块搭建的一个简单服务器程序来演示

// serve.js
var http = require("http")
//创建服务器
http.createServer((req, res) => 
    res.writeHead(200,  "Content-Type": "text/html;charset=utf-8" ) //设置响应头
    res.write(`
      <html>
          <div>hello pm2</div>
      </html>
    `)
    res.end() 
).listen(3000, () => 
    console.log("server start")
)

在项目根路径打开cmd运行下面的命令

// 使用npm2启动这个简单的服务器程序
$ pm2 start serve.js

// 也可以在后面添加一些参数 来附加一些效果
--watch  // --watch 监听程序源文件的变化 一旦发生变化自动重启 (热启动效果)
--ignore-watch // 排除监听的目录或者文件  支持正则表达式
-n --name // 设置程序的名称
--log // 指定日志文件
--max-memory-restart [100MB] // 设置最大占用内存
--no-daemon // 非进程守护模式启动
--no-autorestart // 关闭自动重启
--time // 日志添加时间前缀
-e --error [path] // 错误日志输出路径
-i [n]  //cluster mode 模式启动n个进程实例 
-i max  //集群模式  将会检测cpu的数量并运行尽可能多的进程  自动开启负载均衡的效果
// 还有很多参数可以使用 详细可以查看官网  这些也可以通过pm2配置文件配置

可以看到命令行输出了以下信息 这是这个简单服务器程序的一些基础运行信息,这时即使关闭终端,这个程序仍然会在后套继续运行

各项参数详解

id // 进程id 标识作用 用于其他命令的指向
name // 进程标识 用于其他命令的指向
namespace // 环境名称 
version // 版本
mode //进程模式,cluster或fork。cluster有多个进程,而fork只有一个
pid // 进程id  标识作用
uptime // 运行时间// 重启次数
status // 进程是否在线
cpu // cpu的占用率
mem // 内存占用大小
user // 启动用户名 

可以启动多个这样的任务 可以通过以下命令查看所有的运行程序信息

// 查看所有使用pm2运行的程序信息
$ pm2 list

4.pm2常用命令

1.停止进程

// 停止指定的进程
$ pm2 stop [进程名] | [进程id]
// 停止所有的进程
$ pm2 stop all # 停止所有的应用程序

2.删除进程

// 删除指定的进程
$ pm2 delete [进程名] | [进程id]
// 删除所有进程
$ pm2 delete all
// 杀死pm2的守护进程 同时也会杀死所有进程
$ pm2 kill

3.重启进程

// 以下两个命令都可以达到重启进程的效果
$ pm2 restart [进程名] | [进程id]  // 重启效果 短时间内进程无效
$ pm2 reload [进程名] | [进程id] // 重载效果 会保持进程在线 

// 重启所有进程
$ pm2 reload all
// 重置重启数量
$ pm2 reset [进程名]

4.查看所有进程

// 以下三个命令都可以查看所有进程
$ pm2 list
$ pm2 ls
$ pm2 status

5.查看某一个进程的信息

$ pm2 show [进程名] | [进程id]

6.查看日志

// 查看所有的日志
$ pm2 logs
// 查看指定的进程日志
$ pm2 logs [进程名] | [进程id]
// 清空所有日志
$ pm2 flush

// 还可以附加一些参数 附加功能
--line [数字]  // 查看最后多少条日志 默认是15条
--err // 只查看错误日志
--timestamp // 时实日志附带时间前缀

6.监控所有的进程

// 会进入一个信息面板
$ pm2 monit

7.静态服务器

$ pm2 serve [静态文件夹路径] [端口]

8.扩展实例

// 将指定的进程扩展到n个
$ pm2 scale [服务名] [n]

5.pm2配置文件

$ pm2 ecosystem  // 当前目录下自动生成pm2的配置文件

// 以配置文件启动
$ pm2 start ecosystem.config.js --env production

apps是一个数组 可以同时配置多个进程服务 还有很多的配置项 如果想要了解的更详细还请参照官网
同时日志文件还支持 yml 格式配置 小编这里就不多演示了 详情请参照官网

// ecosystem.config.js 配置演示
module.exports = 
  apps : [
  name      : 'demo',      // 应用的名称
  script    : 'app.js',   // 应用文件路径
  env: 
    PM2_SERVE_PATH: ".",    // 静态服务的路径
    PM2_SERVE_PORT: 8080,   // 静态服务器访问的端口
    NODE_ENV: 'development' // 设置开发环境运行时
  ,
  env_production : 
    NODE_ENV: 'production'  // 设置生产环境运行时
  ,
  instances: "max",         // 将应用程序分布在所有CPU核心上 也可以指定多少个
  watch: true,              // 热启动模式
  output: './out.log',      // 指定日志标准输出文件及位置
  error: './error.log',     // 错误输出日志文件及位置
  merge_logs: true,         // 是否可以合并日志
  log_type: "json",         // 日志类型
  log_date_format: "DD-MM-YYYY",  // 日志的日期格式
  ],
  deploy : 
    production : 
      user : 'SSH_USERNAME',
      host : 'SSH_HOSTMACHINE',
      ref  : 'origin/master',
      repo : 'GIT_REPOSITORY',
      path : 'DESTINATION_PATH',
      'pre-deploy-local': '',
      'post-deploy' : 'npm install && pm2 reload ecosystem.config.js --env production',
      'pre-setup': ''
    
  

6.结尾

这是小编的第二篇博客,励志每周更新一篇,感觉写到这里还有很多pm2的技术点没有写出来,后面可能还会更新一篇关于pm2的博客,专门讲解一下 pm2的一些插件 还有 keymetrics监控 和fork与cluster这两种启动模式,想听的朋友不妨点个关注或者订阅吧,哈哈哈,瑞思拜!

以上是关于PM2的基本使用的主要内容,如果未能解决你的问题,请参考以下文章

node程序的部署神器pm2的基本使用

PM2实用入门指南

TODO:浅谈pm2基本工作原理

PM2使用文档

DevOps之基本软件安装:在Redhat 8.x 上 安装NodeJS,PM2,Docker, Ngnix

DevOps之基本软件安装:在Redhat 8.x 上 安装NodeJS,PM2,Docker, Ngnix