Forever 教程:Node.js 应用的简单进程管理器

1. 什么是 Forever?

Forever 是一个简单的 Node.js 进程管理器,用于确保 Node.js 应用持续运行,即使在崩溃或服务器重启后也能自动重启。它是 Node.js 生态系统中最早的进程管理工具之一,以其简单易用的特点而受到欢迎。

1.1 核心特性

  • 自动重启:当应用崩溃时,Forever 会自动重启应用
  • 日志管理:可以将应用的输出重定向到日志文件
  • 简单配置:使用命令行参数或配置文件进行配置
  • 后台运行:支持将应用作为后台进程运行
  • 监控模式:可以监控文件变化并自动重启应用

1.2 适用场景

  • 小型应用:适合部署小型 Node.js 应用
  • 开发环境:在开发环境中快速测试和运行应用
  • 简单部署:对于不需要复杂进程管理的场景

2. 安装和配置

2.1 全局安装

npm install -g forever

2.2 本地安装

如果只想在特定项目中使用 Forever,可以在项目目录中本地安装:

npm install --save forever

2.3 验证安装

forever --version

3. 基本使用

3.1 启动应用

# 基本启动
forever start app.js

# 启动并指定日志文件
forever start -l forever.log -o out.log -e err.log app.js

# 启动并指定应用名称
forever start --name "my-app" app.js

# 启动并监控文件变化
forever start --watch app.js

3.2 查看运行中的应用

forever list

3.3 停止应用

# 通过进程 ID 停止
forever stop [pid]

# 通过应用名称停止
forever stop --name "my-app"

# 停止所有运行中的应用
forever stopall

3.4 重启应用

# 重启指定应用
forever restart [pid]

# 重启所有应用
forever restartall

4. 高级功能

4.1 使用配置文件

创建一个 forever.json 配置文件:

{
  "uid": "my-app",
  "append": true,
  "watch": true,
  "script": "app.js",
  "sourceDir": "./",
  "logFile": "./logs/forever.log",
  "outFile": "./logs/out.log",
  "errFile": "./logs/err.log",
  "maxRestarts": 10,
  "restartDelay": 1000
}

然后使用配置文件启动应用:

forever start forever.json

4.2 设置环境变量

forever start --env NODE_ENV=production app.js

4.3 限制重启次数

forever start --maxRestarts 5 app.js

4.4 设置重启延迟

forever start --minUptime 1000 --spinSleepTime 1000 app.js

5. 实用案例

5.1 部署简单的 Express 应用

场景:部署一个简单的 Express 应用,确保它持续运行。

步骤

  1. 创建 Express 应用
mkdir my-express-app && cd my-express-app
npm init -y
npm install express
  1. 创建 app.js 文件
const express = require('express');
const app = express();
const port = 3000;

app.get('/', (req, res) => {
  res.send('Hello World!');
});

app.listen(port, () => {
  console.log(`App listening at http://localhost:${port}`);
});
  1. 使用 Forever 启动应用
forever start --name "express-app" app.js
  1. 查看应用状态
forever list
  1. 测试应用

打开浏览器访问 http://localhost:3000,应该看到 "Hello World!"。

  1. 测试自动重启

修改 app.js 文件,然后保存。由于我们没有启用 --watch 选项,应用不会自动重启。如果手动停止应用,Forever 也不会自动重启。

5.2 监控文件变化并自动重启

场景:在开发环境中,当文件变化时自动重启应用。

步骤

  1. 使用 --watch 选项启动应用
forever start --watch --name "dev-app" app.js
  1. 修改应用代码

修改 app.js 文件,例如将响应消息改为 "Hello Forever!"。

  1. 查看日志
forever logs dev-app
  1. 测试应用

打开浏览器访问 http://localhost:3000,应该看到更新后的 "Hello Forever!" 消息。

6. 代码示例

6.1 基本启动示例

# 启动应用并设置日志文件
forever start -l forever.log -o out.log -e err.log app.js

# 查看运行状态
forever list

# 停止应用
forever stop 0

6.2 使用配置文件示例

forever.json

{
  "uid": "my-express-app",
  "script": "app.js",
  "watch": true,
  "ignoreWatch": ["node_modules", "logs"],
  "logFile": "./logs/forever.log",
  "outFile": "./logs/out.log",
  "errFile": "./logs/err.log",
  "maxRestarts": 5,
  "restartDelay": 1000,
  "env": {
    "NODE_ENV": "production",
    "PORT": "3000"
  }
}

启动命令

forever start forever.json

6.3 批量管理多个应用

启动多个应用

forever start --name "app1" app1.js
forever start --name "app2" app2.js

查看所有应用

forever list

停止所有应用

forever stopall

7. 常见问题和解决方案

7.1 应用无法启动

问题:Forever 启动应用后立即退出。

解决方案

  • 检查应用的错误日志:forever logs [uid]
  • 确保应用没有语法错误
  • 确保应用依赖已正确安装

7.2 应用无法自动重启

问题:应用崩溃后,Forever 没有自动重启。

解决方案

  • 检查 Forever 的日志文件
  • 确保没有达到最大重启次数限制
  • 确保应用不是因为同一个错误反复崩溃

7.3 日志文件过大

问题:Forever 生成的日志文件过大。

解决方案

  • 配置日志轮转
  • 使用 --append 选项控制日志写入方式
  • 定期清理日志文件

8. 总结

Forever 是一个简单易用的 Node.js 进程管理器,适合小型应用和开发环境。它提供了基本的进程管理功能,如自动重启、日志管理和后台运行等。

8.1 优点

  • 简单易用:命令行界面简洁明了
  • 轻量级:安装和使用都非常简单
  • 基本功能完备:满足小型应用的进程管理需求

8.2 局限性

  • 功能有限:相比 PM2 等工具,功能较为简单
  • 不适合复杂场景:对于需要负载均衡、集群管理等高级功能的场景,建议使用 PM2
  • 配置选项较少:可配置性不如其他进程管理工具

8.3 适用场景

  • 小型应用:适合部署小型 Node.js 应用
  • 开发环境:在开发环境中快速测试和运行应用
  • 简单部署:对于不需要复杂进程管理的场景

通过本教程,你应该已经掌握了 Forever 的基本使用方法和常见场景的应用。在实际开发和部署中,根据应用的规模和需求,选择合适的进程管理工具是非常重要的。

« 上一篇 PM2 教程 下一篇 » Docker 教程:容器化平台详解