前言
直接在终端运行 openclaw up 有一个致命问题:一旦终端关闭或 SSH 断开,服务就会停止。本文介绍两种生产级的进程管理方案——PM2 和 Systemd,帮助你让 OpenClaw 稳定运行在服务器上。
一、PM2 方案(推荐)
PM2 是 Node.js 生态中最流行的进程管理器,与 OpenClaw 天然兼容。
1.1 安装 PM2
# 全局安装 PM2
npm install -g pm2
# 验证安装
pm2 --version
1.2 快速启动 OpenClaw
# 使用 PM2 启动 OpenClaw
pm2 start openclaw -- up
# 查看运行状态
pm2 status
输出类似:
┌─────┬──────────┬─────────────┬─────────┬─────────┬──────────┐
│ id │ name │ namespace │ mode │ status │ cpu │
├─────┼──────────┼─────────────┼─────────┼─────────┼──────────┤
│ 0 │ openclaw │ default │ fork │ online │ 0.3% │
└─────┴──────────┴─────────────┴─────────┴─────────┴──────────┘
1.3 使用 Ecosystem 配置文件
对于生产环境,建议使用 PM2 的 ecosystem 配置文件进行精细化管理:
# 创建配置文件
nano ~/openclaw-ecosystem.config.js
// ~/openclaw-ecosystem.config.js
module.exports = {
apps: [
{
name: "openclaw",
script: "openclaw",
args: "up",
cwd: process.env.HOME,
// 重启策略
autorestart: true,
max_restarts: 10,
min_uptime: "30s",
restart_delay: 5000,
// 资源限制
max_memory_restart: "512M",
// 环境变量
env: {
NODE_ENV: "production",
NODE_OPTIONS: "--max-old-space-size=512"
},
// 日志配置
log_file: "/var/log/openclaw/combined.log",
out_file: "/var/log/openclaw/out.log",
error_file: "/var/log/openclaw/error.log",
log_date_format: "YYYY-MM-DD HH:mm:ss Z",
merge_logs: true,
// 监听文件变化自动重启(开发环境使用)
watch: false,
// 优雅关闭
kill_timeout: 10000,
listen_timeout: 15000
}
]
};
# 创建日志目录
sudo mkdir -p /var/log/openclaw
sudo chown $USER:$USER /var/log/openclaw
# 使用 ecosystem 文件启动
pm2 start ~/openclaw-ecosystem.config.js
# 查看状态
pm2 status
1.4 开机自启配置
这是 PM2 最强大的功能之一——一条命令实现开机自启:
# 生成开机自启脚本(根据系统自动选择 systemd/upstart/launchd)
pm2 startup
# 系统会输出一条需要 sudo 执行的命令,复制并执行它
# 例如:
# sudo env PATH=$PATH:/usr/bin /usr/lib/node_modules/pm2/bin/pm2 startup systemd -u your_user --hp /home/your_user
# 保存当前进程列表
pm2 save
重要提示:每次修改 PM2 管理的进程后(添加、删除、重启),都需要执行
pm2 save来更新保存的进程列表。
1.5 常用 PM2 管理命令
| 命令 | 功能 |
|---|---|
pm2 status |
查看所有进程状态 |
pm2 logs openclaw |
查看实时日志 |
pm2 logs openclaw --lines 100 |
查看最近100行日志 |
pm2 restart openclaw |
重启服务 |
pm2 stop openclaw |
停止服务 |
pm2 delete openclaw |
删除进程 |
pm2 reload openclaw |
零停机重载 |
pm2 monit |
进入实时监控面板 |
pm2 describe openclaw |
查看进程详细信息 |
pm2 env 0 |
查看进程环境变量 |
1.6 PM2 实时监控面板
# 启动交互式监控面板
pm2 monit
该面板实时显示以下信息:
- CPU 和内存使用率
- 实时日志滚动
- 进程元数据(PID、运行时间、重启次数)
- 自定义指标
1.7 PM2 日志管理
长时间运行后,日志文件会变得很大。使用 pm2-logrotate 模块自动轮转:
# 安装日志轮转模块
pm2 install pm2-logrotate
# 配置轮转参数
pm2 set pm2-logrotate:max_size 50M # 单个文件最大 50MB
pm2 set pm2-logrotate:retain 7 # 保留最近 7 个文件
pm2 set pm2-logrotate:compress true # 压缩旧日志
pm2 set pm2-logrotate:dateFormat YYYY-MM-DD_HH-mm-ss
pm2 set pm2-logrotate:rotateInterval '0 0 * * *' # 每天轮转
# 手动清空当前日志
pm2 flush openclaw
1.8 PM2 升级 OpenClaw
当需要升级 OpenClaw 版本时:
# 1. 升级 OpenClaw
npm install -g openclaw@latest
# 2. 重启 PM2 中的进程
pm2 restart openclaw
# 3. 确认版本和状态
pm2 describe openclaw
curl -s http://localhost:18789/health | jq .version
二、Systemd 方案
如果你更偏好 Linux 原生的进程管理方式,Systemd 是最佳选择。
2.1 创建 Systemd 服务文件
# 找到 openclaw 的安装路径
which openclaw
# 通常是 /usr/bin/openclaw 或 /usr/local/bin/openclaw
# 创建服务文件
sudo nano /etc/systemd/system/openclaw.service
[Unit]
Description=OpenClaw AI Assistant Platform
Documentation=https://openclaw.com
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=openclaw
Group=openclaw
WorkingDirectory=/home/openclaw
# 启动命令
ExecStart=/usr/local/bin/openclaw up
ExecStop=/bin/kill -SIGTERM $MAINPID
ExecReload=/bin/kill -SIGUSR2 $MAINPID
# 环境变量
Environment=NODE_ENV=production
Environment=NODE_OPTIONS=--max-old-space-size=512
# 重启策略
Restart=always
RestartSec=10
StartLimitBurst=5
StartLimitIntervalSec=60
# 资源限制
MemoryMax=1G
CPUQuota=80%
# 安全加固
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=read-only
ReadWritePaths=/home/openclaw/.config/openclaw
ReadWritePaths=/home/openclaw/.openclaw
PrivateTmp=true
# 日志
StandardOutput=journal
StandardError=journal
SyslogIdentifier=openclaw
[Install]
WantedBy=multi-user.target
2.2 创建专用用户(推荐)
# 创建系统用户
sudo useradd -r -m -s /bin/bash openclaw
# 切换到该用户完成初始化配置
sudo -u openclaw bash -c "openclaw onboard"
2.3 启用和管理服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload
# 启用开机自启
sudo systemctl enable openclaw
# 启动服务
sudo systemctl start openclaw
# 查看状态
sudo systemctl status openclaw
2.4 常用 Systemd 管理命令
| 命令 | 功能 |
|---|---|
systemctl start openclaw |
启动服务 |
systemctl stop openclaw |
停止服务 |
systemctl restart openclaw |
重启服务 |
systemctl status openclaw |
查看状态 |
systemctl enable openclaw |
启用开机自启 |
systemctl disable openclaw |
禁用开机自启 |
journalctl -u openclaw -f |
实时查看日志 |
journalctl -u openclaw --since "1 hour ago" |
查看最近1小时日志 |
journalctl -u openclaw -p err |
只看错误日志 |
2.5 Systemd 日志管理
Systemd 使用 journald 管理日志,可以通过以下方式控制日志大小:
# 编辑 journald 配置
sudo nano /etc/systemd/journald.conf
# 设置最大日志占用空间
# SystemMaxUse=500M
# SystemMaxFileSize=50M
# 重启 journald
sudo systemctl restart systemd-journald
# 手动清理旧日志(保留最近3天)
sudo journalctl --vacuum-time=3d
# 手动清理旧日志(限制总大小 200MB)
sudo journalctl --vacuum-size=200M
三、PM2 vs Systemd 对比
| 特性 | PM2 | Systemd |
|---|---|---|
| 安装难度 | 简单(npm install) | 无需安装(系统自带) |
| 配置难度 | 中等 | 中等 |
| Node.js 集成 | 原生支持 | 需手动配置 |
| 监控面板 | 内置(pm2 monit) | 需第三方工具 |
| 日志管理 | 需插件 | journald 原生支持 |
| 安全加固 | 有限 | 丰富的沙箱选项 |
| 资源限制 | 内存限制 | CPU/内存/IO 全面限制 |
| 集群模式 | 支持 | 不直接支持 |
| 跨平台 | Windows/Mac/Linux | 仅 Linux |
| 适用场景 | 开发/小型生产 | 生产环境 |
四、崩溃自动恢复测试
无论使用哪种方案,都建议测试崩溃恢复能力:
# 获取 OpenClaw 的 PID
pgrep -f "openclaw up"
# 模拟进程崩溃
kill -9 $(pgrep -f "openclaw up")
# 等待几秒后检查是否自动重启
sleep 15
# PM2 方案
pm2 status
# Systemd 方案
systemctl status openclaw
五、最佳实践建议
- 个人项目或开发环境:使用 PM2,配置简单、功能丰富
- 生产服务器:使用 Systemd,安全加固选项更多
- 两者结合:用 Systemd 管理 PM2 本身,兼得两者优势
- 务必配置日志轮转:防止磁盘被日志文件占满
- 设置合理的重启限制:避免无限循环重启消耗资源
- 配合监控使用:参考本站《OpenClaw服务监控和告警配置教程》搭建监控
配置好进程管理后,你的 OpenClaw 服务将具备企业级的运行稳定性,再也不用担心意外中断的问题。