快速入门 Quick Start

介绍是什么、它的工作原理、它的用途以及何时使用它。

PM2 进程管理

PM2 是一个守护进程管理器,它将帮助您管理和保持您的应用程序在线。 PM2 入门非常简单,它以简单直观的 CLI 形式提供,可通过 NPM 安装。

安装

最新的 PM2 版本可以通过 NPM 或 Yarn 安装:

bash
$ npm install pm2@latest -g
# or
$ yarn global add pm2

要安装 Node.js 和 NPM,您可以使用 NVM

启动应用

启动、守护进程和监视应用程序的最简单方法是使用以下命令行:

或者轻松启动任何其他应用程序:

bash
$ pm2 start bashscript.sh
$ pm2 start python-app.py --watch
$ pm2 start binary-file -- --port 1520

Some options you can pass to the CLI:

bash
# 指定应用名称
--name <app_name>

# 文件更改时监视并重新启动应用程序
--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

如您所见,有许多选项可用于使用 PM2 管理您的应用程序。 您将根据您的用例发现它们。

管理流程

管理应用程序状态很简单,这里是命令:

bash
$ pm2 restart app_name
$ pm2 reload app_name
$ pm2 stop app_name
$ pm2 delete app_name

除了 app_name,您还可以传递:

  • all 作用于所有进程
  • id 作用于特定的进程 ID

检查状态、日志、指标

现在您已经启动了这个应用程序,您可以检查它的状态、日志、指标,甚至可以使用 pm2.io 获取在线仪表板。

列出托管应用程序

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

列出托管应用程序

显示日志

实时显示日志:

挖掘旧日志:

基于终端的仪表板

这是一个直接适合您的终端的实时仪表板:

基于终端的仪表板

pm2.io: Monitoring & Diagnostic Web Interface

基于 Web 的仪表板,具有诊断系统的跨服务器:

基于 Web 的仪表板

集群模式

对于 Node.js 应用程序,PM2 包括一个自动负载平衡器,它将在每个衍生进程之间共享所有 HTTP[s]/Websocket/TCP/UDP 连接。

要以集群模式启动应用程序:

bash
$ pm2 start app.js -i max

此处 阅读有关集群模式的更多信息。

生态系统文件

您还可以创建一个称为生态系统文件的配置文件来管理多个应用程序。 要生成生态系统文件:

这将生成一个 ecosystem.config.js 文件:

js
module.exports = {
  apps: [{
    name: 'app',
    script: './app.js',
    env: {
      NODE_ENV: 'development',
    },
    env_production: {
      NODE_ENV: 'production',
    }
  }, {
    name: 'worker',
    script: 'worker.js'
  }]
}

And start it easily:

bash
$ pm2 start ecosystem.config.js

此处 阅读有关应用程序声明的更多信息。

设置启动脚本

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

并冻结自动重生的进程列表:

此处 阅读有关启动脚本生成器的更多信息。

重新启动应用程序更改

使用 --watch 选项非常简单:

bash
$ cd /path/to/my/app
$ pm2 start env.js --watch --ignore-watch="node_modules"

这将在当前目录+所有子文件夹中的任何文件更改时监视并重新启动应用程序,并且它将忽略 node_modules 文件夹中的任何更改 --ignore-watch="node_modules" 。

然后,您可以使用 pm2 logs 来检查重新启动的应用程序日志。

更新 PM2

我们让它变得简单,版本之间没有重大变化,过程很简单:

bash
$ npm install pm2@latest -g

然后更新内存中的 PM2 :

备忘单

以下是一些值得了解的命令。 只需使用示例应用程序或开发机器上当前的 Web 应用程序来尝试它们:

bash
# Fork mode
pm2 start app.js --name my-api # Name process

# Cluster mode
pm2 start app.js -i 0        # 将根据可用的 CPU 使用 LB 启动最大进程
pm2 start app.js -i max      # 与上面相同,但已弃用。
pm2 scale app +3             # 将 `app` 增加 3 名工人
pm2 scale app 2              # 将 `app` 向上或向下扩展到总共 2 个工人

# Listing

pm2 list               # 显示所有进程状态
pm2 jlist              # 以原始 JSON 格式打印进程列表
pm2 prettylist         # 以美化JSON打印进程列表
pm2 describe 0         # 显示有关特定进程的所有信息
pm2 monit              # 监控所有进程

# Logs

pm2 logs [--raw]       # 在流中显示所有进程日志
pm2 flush              # 清空所有日志文件
pm2 reloadLogs         # 重新加载所有日志

# Actions

pm2 stop all           # 停止所有进程
pm2 restart all        # 重启所有进程
pm2 reload all         # 将 0s 停机时间重新加载(对于 NETWORKED 应用程序)
pm2 stop 0             # 停止特定进程 ID
pm2 restart 0          # 重启特定进程id
pm2 delete 0           # 将从 pm2 列表中删除进程
pm2 delete all         # 将从 pm2 列表中删除所有进程

# Misc

pm2 reset <process>    # 重置元数据(重启时间...)
pm2 updatePM2          # 更新内存pm2
pm2 ping               # 确保 pm2 守护进程已经启动
pm2 sendSignal SIGUSR2 my-app # 向脚本发送系统信号
pm2 start app.js --no-daemon
pm2 start app.js --no-vizion
pm2 start app.js --no-autorestart

下一步是什么?

了解如何将应用程序的所有行为选项声明到 JSON 配置文件

了解如何干净停止并重新启动 来提高可靠性。

了解如何轻松部署和更新生产应用程序

使用 PM2.io 监控您的生产应用程序。

如何更新PM2

安装最新的 pm2 版本:

bash
$ npm install pm2@latest -g

然后更新内存中的 PM2 :