首页 进程管理-PM2
文章
取消

进程管理-PM2

介绍

PM2 是一个守护进程管理器,可以帮助您管理应用程序并使其保持在线状态。 PM2 入门非常简单,它提供了一个简单直观的 CLI,可以轻松看到所有进程的状态。

PM2 就是 Node 的一个包,可以使用 npm 或 yarn 轻松安装。可能是因为他是由 JavaScript 而发的,所有更多的作为部署 Node 后端而广泛使用,但是他并不是只能用于 Node 项目。

安装

1
2
3
4
# npm
npm install pm2@latest -g
# or yarn
yarn global add pm2

使用

PM2 使用起来非常简单,他的文档也相当详细,主要分为命令行方式和配置文件方式。

命令行方式

1
2
3
4
pm2 start app.js
pm2 start bashscript.sh
pm2 start python-app.py --watch
pm2 start binary-file -- --port 1520

命令行方式可以在命令行直接传入参数。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# 指定应用程序名称
--name <app_name>

# 指定服务端口号
--port <80>

# 指定实例数,用于集群(cluster)模式
-i --instances <number>

# 文件更改时观察并重新启动应用程序,主要用于开发的时候,文件变化不需要手动重启。
--watch

# 设置应用程序重新加载的内存阈值,超过这个阈值他会自动重启,避免内存溢出。
--max-memory-restart <200MB>

# 指定日志文件
--log <log_path>

# 向脚本传递额外参数
-- arg1 arg2 arg3

# 自动重启之间的延迟
--restart-delay <delay in ms>

# 在日志前添加时间
--time

# 不自动重启应用程序,默认如果程序出现问题他会重新启动。
--no-autorestart

# 指定强制重启的cron,设置重启计划
--cron <cron_pattern>

# 附加到应用程序日志
--no-daemon

# 选择环境,这个参数一般用于配置文件启动,配置文件里配置不同的环境参数,注意格式:env_pro对应:--env pro
--env

配置文件方式

1
2
3
# 生成初始化配置文件 ecosystem.config.js
# 上面的参数皆可以在配置文件里进行配置
pm2 ecosystem
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# ecosystem.config.js
module.exports = {
  apps : [{
    name: "app",
    script: "./app.js",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
    }
  }, {
     name: 'worker',
     script: 'worker.js'
  }]
}
1
2
pm2 start ecosystem.config.js # 默认环境 env
pm2 start ecosystem.config.js --env production # 用于选择不同的环境,env_production

其他命令

1
2
3
4
5
# 进程管理
pm2 restart app_name
pm2 reload app_name
pm2 stop app_name
pm2 delete app_name
1
2
# 查看状态
pm2 [list|ls|status] # 表现一样,别名

查看状态

1
2
3
# 查看日志
pm2 logs
pm2 logs --lines 200
1
2
3
# 监控
pm2 monit # 终端监控,不需要浏览器
pm2 plus # web端监控,更好看但是需要浏览器也有无浏览器模式。

终端监控

web端监控

模式

PM2 有两种模式:

  • fork:通过fork一个进程来执行系统,这个是默认模式,如果不指定实例数量自动开启该模式,这个模式有一个好处:即任何应用都可以使用,不受应用代码限制。

  • cluster:集群模式,如果设置了模式或指定实例数量将会开启该模式,这个模式下有一个负载均衡,可以自动将请求路由到后端实例。但是该模式的限制是必须是 Node 项。

遇到的问题

  • 我在部署项目的时候因为项目中使用了修改环境变量的功能,又用了cluster,导致项目表现不一致的问题,这是因为每个实例都是隔离的,通过应用功能修改的都是自己的环境变量,所有相互不能同步,导致表现不一致。

  • 我在用 PM2 部署yarn项目的时候,直接使用 yarn start 命令,而在Cluster模式下始终失败,可能是因为 Cluser 只能是 Node 项目,最终使用 node app.js 方式成功。

参考资料

  1. GitHub地址

  2. 官网文档

本文由作者按照 CC BY 4.0 进行授权

搭建个人搜索引擎-SearXNG

-