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 forever2.2 本地安装
如果只想在特定项目中使用 Forever,可以在项目目录中本地安装:
npm install --save forever2.3 验证安装
forever --version3. 基本使用
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.js3.2 查看运行中的应用
forever list3.3 停止应用
# 通过进程 ID 停止
forever stop [pid]
# 通过应用名称停止
forever stop --name "my-app"
# 停止所有运行中的应用
forever stopall3.4 重启应用
# 重启指定应用
forever restart [pid]
# 重启所有应用
forever restartall4. 高级功能
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.json4.2 设置环境变量
forever start --env NODE_ENV=production app.js4.3 限制重启次数
forever start --maxRestarts 5 app.js4.4 设置重启延迟
forever start --minUptime 1000 --spinSleepTime 1000 app.js5. 实用案例
5.1 部署简单的 Express 应用
场景:部署一个简单的 Express 应用,确保它持续运行。
步骤:
- 创建 Express 应用:
mkdir my-express-app && cd my-express-app
npm init -y
npm install express- 创建 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}`);
});- 使用 Forever 启动应用:
forever start --name "express-app" app.js- 查看应用状态:
forever list- 测试应用:
打开浏览器访问 http://localhost:3000,应该看到 "Hello World!"。
- 测试自动重启:
修改 app.js 文件,然后保存。由于我们没有启用 --watch 选项,应用不会自动重启。如果手动停止应用,Forever 也不会自动重启。
5.2 监控文件变化并自动重启
场景:在开发环境中,当文件变化时自动重启应用。
步骤:
- 使用 --watch 选项启动应用:
forever start --watch --name "dev-app" app.js- 修改应用代码:
修改 app.js 文件,例如将响应消息改为 "Hello Forever!"。
- 查看日志:
forever logs dev-app- 测试应用:
打开浏览器访问 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 06.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.json6.3 批量管理多个应用
启动多个应用:
forever start --name "app1" app1.js
forever start --name "app2" app2.js查看所有应用:
forever list停止所有应用:
forever stopall7. 常见问题和解决方案
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 的基本使用方法和常见场景的应用。在实际开发和部署中,根据应用的规模和需求,选择合适的进程管理工具是非常重要的。