首页 教程 分类 Skills下载 关于
ZH EN JA KO
安全运维

使用PM2和Systemd管理OpenClaw进程教程

· 13 分钟

前言

直接在终端运行 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

五、最佳实践建议

  1. 个人项目或开发环境:使用 PM2,配置简单、功能丰富
  2. 生产服务器:使用 Systemd,安全加固选项更多
  3. 两者结合:用 Systemd 管理 PM2 本身,兼得两者优势
  4. 务必配置日志轮转:防止磁盘被日志文件占满
  5. 设置合理的重启限制:避免无限循环重启消耗资源
  6. 配合监控使用:参考本站《OpenClaw服务监控和告警配置教程》搭建监控

配置好进程管理后,你的 OpenClaw 服务将具备企业级的运行稳定性,再也不用担心意外中断的问题。

OpenClaw 是开源免费的个人AI助手,支持 WhatsApp、Telegram、Discord 等多平台接入