PM2 管理 OpenClaw

2026-05-05阅读 0热度 0
人工智能

PM2 管理 OpenClaw:让服务稳如磐石,告别“临时工”心态

服务保活是个技术活,核心目标就一个:别让你的关键服务像个“临时工”一样,说跑路就跑路。今天要聊的,就是如何用 PM2 这个专业工具,把 OpenClaw 服务管得服服帖帖。

为了讲清楚,这份指南分成了两大块:

第一部分,是可长期复用的 PM2 标准操作流程,手把手教你搭建稳健的运行环境。

第二部分,则是一次真实的故障复盘记录,看看踩了哪些坑,以及如何精准排雷。

先说核心结论:用 PM2 管理 OpenClaw,关键就三件事。第一,必须通过生态配置文件 ecosystem.config.js 来启动命令行工具。第二,务必配置日志切割,这是防止日志文件无限膨胀、最终撑爆磁盘的保命操作。第三,也是最重要的一点,只保留 PM2 这一种管控方式,千万别让它和系统自带的服务管理并存,否则冲突起来会让你头疼不已。

为什么是 PM2?它的核心价值在哪

PM2 是什么?简单说,它是 Node.js 应用的进程管理专家,你可以把它想象成 Node.js 进程的“全能管家”。这个管家能干的事可多了:应用的启动、停止、重启不在话下,还能集中管理日志、实时监控状态。更厉害的是,它能实现进程崩溃后自动拉起、内存超限自动重启,甚至配置系统开机自启。有了它,服务的稳定性自然就上了一个台阶。

核心能力具体作用对 OpenClaw 的现实意义
进程守护进程崩溃后自动重新拉起最大限度避免服务意外中断,保障连续性
内存阈值重启内存占用超过设定值(如 max_memory_restart)时自动重启有效降低因内存泄漏或长期运行导致的卡死风险
日志集中与切割收集日志并限制单个文件大小,自动分片存档防止日志文件无限增长,最终占满整个磁盘空间
开机自启系统重启后,自动恢复预设的进程列表减少人工干预,实现真正的“设好即忘”式运维

一步步来:配置详解(以 macOS 为例)

理论讲完,咱们动手实操。下面就以 macOS 系统为例,看看具体怎么配置。

1. 安装 PM2

首先,通过 npm 全局安装 PM2,并验证版本。

npm install -g pm2
pm2 -v

2. 准备专属目录

创建一个专门的目录来存放配置和日志,让一切井然有序。

mkdir -p ~/.openclaw/logs

3. 创建核心配置文件

~/.openclaw/ 目录下,创建名为 ecosystem.config.js 的文件。这才是 PM2 管理 OpenClaw 的“总指挥所”。

module.exports = {
  apps: [{
    name: 'openclaw',
    script: '/Users/yourname/.nvm/versions/node/v22.22.1/bin/openclaw',
    args: 'gateway --port 18789',
    interpreter: 'none',
    max_memory_restart: '1G',
    log_date_format: 'YYYY-MM-DD HH:mm:ss Z',
    merge_logs: true,
    max_size: '100M',
    log_file: '/Users/yourname/.openclaw/logs/combined.log',
    out_file: '/Users/yourname/.openclaw/logs/out.log',
    error_file: '/Users/yourname/.openclaw/logs/error.log',
    env: {
      NODE_ENV: 'production'
    }
  }]
};

配置里有几个关键点需要特别注意:

script 字段必须填入通过 which openclaw 命令查到的绝对路径,不能用相对路径。对于管理 CLI 工具,interpreter: 'none' 这个设置至关重要,千万别省略。另外,max_size 参数强烈建议配置,它就是前面提到的“日志切割”开关,能牢牢锁住日志文件的体积。

必须掌握的标准操作命令

配置好之后,日常管理就靠下面这些命令了。熟记它们,运维效率能提升一大截。

# 启动服务
cd ~/.openclaw && pm2 start ecosystem.config.js

# 停止服务(会保留进程配置记录)
pm2 stop openclaw

# 重启服务(修改配置后通常需要执行此操作)
pm2 restart openclaw

# 从PM2列表中彻底删除进程记录(需要重建时使用)
pm2 delete openclaw

# 查看所有由PM2管理的进程状态
pm2 list

# 实时追踪服务日志输出
pm2 logs openclaw -f

进阶一步:配置开机自启(macOS)

想让服务在电脑重启后自动恢复?PM2 也能轻松搞定。

pm2 startup darwin
pm2 save

这里有两个常见的注意事项:首先,pm2 startup systemd 是 Linux 系统的命令,在 macOS 上可别用错了,得用 darwin。其次,执行完 pm2 startup darwin 后,命令行通常会提示一条需要 sudo 权限执行的命令,记得跟着执行一下。最后,pm2 save 的作用是保存当前 PM2 管理的进程清单,它不能替代 startup 步骤,两步都需要完成。


实战复盘:一次端口占用报错的全过程

光说不练假把式。下面分享一次真实的故障处理经历,看看理论如何指导实践。

当时发生了什么?

执行启动命令时,终端接连报出几条错误信息:

Port 18789 is already in use (端口已被占用)

gateway already running (pid 35631) (网关进程已存在)

Gateway service appears loaded (网关服务似乎已加载)

很明显,启动失败了。

问题根源在哪里?

直接原因很清晰:18789 这个端口已经被一个正在运行的网关进程占用了,再次执行启动命令,自然就会冲突。

但更深层的原因是什么呢?其实是管理方式的“政出多门”。PM2 想管这个进程,而 macOS 的系统服务(LaunchAgent)也在试图管理它,两套管理系统并存,很可能导致同一个进程被重复拉起,或者状态管理混乱。

这里有一个关键洞察:像飞书这类依赖端连接的应用,它们检测服务是否可用的标准,是“能否成功连接到指定的端口”,而不是“启动命令是否成功执行”。也就是说,只要已经有网关进程在 18789 端口上正常监听,飞书就可能一直正常工作,即便你再次执行启动命令会报错。

一步步解决它

遇到问题不要慌,按照以下步骤排查,基本都能解决。

# 1) 强制停止占用端口的旧进程
kill -9 35631

# 2) 卸载可能自动拉起服务的系统启动项
launchctl bootout gui/501/ai.openclaw.gateway

# 3) 清理 PM2 中旧的进程记录,避免干扰
pm2 stop openclaw
pm2 delete openclaw

# 4) 确认端口已被释放(执行后无输出则表示端口空闲)
lsof -i :18789

# 5) 使用唯一的、正确的入口重新启动
cd ~/.openclaw && pm2 start ecosystem.config.js

处理完成后,执行 pm2 list 检查,openclaw 的状态应该已经恢复为 online。自此之后,坚持只通过 PM2 这个单一入口来管理服务,就再也没出现过重复启动的冲突了。

这次复盘给我们提了个醒:第一,管控方式务必统一,强烈推荐只用 PM2。第二,在启动或重启服务前,养成先检查端口占用情况的好习惯。第三,报错信息本身有时会“骗人”,它不代表服务一定不可用,首先得判断当前是否已有进程在运行。

常用命令速查表

最后,送上一张速查表,把最常用的命令汇总在一起,方便随时取用。

需求场景对应命令
启动服务cd ~/.openclaw && pm2 start ecosystem.config.js
停止服务pm2 stop openclaw
重启服务pm2 restart openclaw
删除记录pm2 delete openclaw
查看状态pm2 list
查看日志pm2 logs openclaw -f
免责声明

本网站新闻资讯均来自公开渠道,力求准确但不保证绝对无误,内容观点仅代表作者本人,与本站无关。若涉及侵权,请联系我们处理。本站保留对声明的修改权,最终解释权归本站所有。

相关阅读

更多
欢迎回来 登录或注册后,可保存提示词和历史记录
登录后可同步收藏、历史记录和常用模板
注册即表示同意服务条款与隐私政策