# PM2 进程守护

URL: https://caijiao.org/pm2/process-management/process-guardian
Source: docs/pm2/process-management/process-guardian.md
Description: 了解如何使用 PM2 进程守护功能，确保你的 Node.js 应用在崩溃、重启或服务器重启时能够自动恢复运行。PM2 提供了强大的进程守护机制，提高应用的可靠性和稳定性。

在生产环境中，确保 Node.js 应用长期稳定运行是至关重要的。PM2 提供了强大的进程守护功能，帮助你在应用崩溃、重启或服务器重启时，自动恢复应用，最大化减少应用的停机时间。

## 1. 什么是进程守护？

进程守护是指通过自动监控和重启应用，确保应用在出现崩溃或异常时，能够被快速恢复。PM2 的进程守护功能使得你的应用即使在遇到问题时也能自动重启，保障应用持续稳定地运行。

## 2. 启用进程守护

在 PM2 中，所有应用都默认启用进程守护功能。只需启动应用，PM2 就会自动监控应用的进程，并在应用崩溃或被杀死时，自动重启。

### 启动应用并启用守护

使用以下命令启动应用：

```bash
pm2 start app.js
```

PM2 会自动监控应用进程，并在应用崩溃时进行重启。你可以通过 `pm2 status` 查看应用的运行状态，确认进程守护是否生效。

### 示例

```bash
pm2 status
```

输出示例：

```txt
┌─────┬──────────────┬────────┬───┬──────┬────────┬───┬─────────────┬─────────────┐
│ id  │ name         │ mode   │ ↺ │ status│ cpu    │ memory │ uptime     │
├─────┼──────────────┼────────┼───┼──────┼────────┼───┼─────────────┼─────────────┤
│ 0   │ my-app       │ fork   │ 3 │ online│ 0.5%   │ 50MB  │ 1h          │
└─────┴──────────────┴────────┴───┴──────┴────────┴───┴─────────────┴─────────────┘
```

其中，`↺` 列表示应用的重启次数，每次应用崩溃并被 PM2 重启时，这个数字会增加。

## 3. 自动重启策略

PM2 提供了多种进程守护策略，你可以根据应用的实际需求设置不同的自动重启规则。

### 配置文件中的自动重启设置

你可以通过 `ecosystem.config.js` 配置文件来设置应用的自动重启策略。以下是常见的配置选项：

* **`restart_delay`**：应用崩溃后重启的延迟时间，防止频繁重启导致资源浪费。
* **`max_restarts`**：限制应用在一定时间内的最大重启次数，避免因错误引发过多重启。
* **`watch`**：启用文件监控，应用文件发生变化时自动重启。

例如：

```javascript
module.exports = {
  apps: [
    {
      name: 'my-app',
      script: './app.js',
      restart_delay: 5000,   // 崩溃后 5 秒钟重启
      max_restarts: 10,      // 限制最多重启 10 次
      watch: true,           // 启用文件监控
    },
  ],
};
```

配置文件中的设置将帮助你定制进程守护的行为。

### 手动设置重启延迟

如果你希望在应用崩溃后，延迟一定时间再重启，可以使用 `--restart-delay` 选项。例如：

```bash
pm2 start app.js --restart-delay 5000
```

这将使得应用在崩溃后等待 5 秒钟才重新启动，减少系统的压力。

## 4. 崩溃恢复和系统重启

除了自动重启，PM2 还支持在系统重启时自动恢复应用进程。你可以使用 `pm2 startup` 命令生成启动脚本，使得 PM2 在服务器重启后自动启动并恢复应用。

### 启动脚本生成

在 Linux 或 macOS 上，运行以下命令：

```bash
pm2 startup
```

该命令会生成一个启动脚本，根据你的操作系统配置自动启动 PM2 和它管理的应用。生成脚本后，保存进程列表：

```bash
pm2 save
```

这将保存当前所有运行的进程，确保系统重启后，PM2 会自动恢复应用进程。

## 5. 查看进程守护状态

你可以随时通过 `pm2 show` 命令查看应用的守护状态及其配置：

```bash
pm2 show my-app
```

输出中会列出有关进程守护的详细信息，如进程 ID、状态、重启策略等。

## 6. 结语

PM2 的进程守护功能能够确保你的 Node.js 应用在生产环境中高可用、稳定运行。通过自动重启和系统重启后的恢复机制，PM2 能够最大程度地减少停机时间，确保用户在访问时不受影响。

无论是通过简单的命令启动应用，还是通过配置文件进行高级设置，PM2 都提供了灵活且强大的进程守护功能，帮助你轻松管理生产环境中的应用。
