# CLI-Anything PM2：读取退出码与日志，修复反复重启的隔离练习服务

## 执行范围

已运行隔离PM2和CLI-Anything describe/logs/start：退出码7负例与修复online、restart_time=0；仅清理本题PM2_HOME。

## 输入与目标

仅属于练习的独立PM2_HOME与一份因缺字段退出的Node服务

交付：隔离进程记录、错误日志与稳定运行回执

## 运行

在 reference 目录执行；先按文件 requirements.txt / package.json 或原生工具文档安装依赖。浏览器练习需 `npx playwright install chromium`；也可设置 `PLAYWRIGHT_EXECUTABLE_PATH` 为自己的 Chrome 路径。

```sh
LESSON_PM2_HOME="<short isolated directory>" python run.py
```

## 目录

- fixtures：作者原创输入，不包含用户真实资料。
- starter：读者待完成任务。
- reference：作者完成参考。
- results：作者实际运行所得或明确标注的待运行输入/预期合同。

## 七步

1. **隔离进程守护器**

显式指定独立且较短的PM2_HOME。macOS socket路径过长会EINVAL，先解决路径，不要连接真实全局守护器。

2. **启动退出负例**

原创crash.cjs明确输出缺RATE_CENTS并退出7。限制重启次数，避免制造无休止循环或占用生产端口。

3. **读取原生状态**

用CLI-Anything process describe查看状态、退出码和重启信息。仅看到PM2 daemon在线不能说明练习服务可用。

4. **定位真实日志**

用logs view回读FIXTURE缺省值错误，和退出码7对应起来。先修输入合同，不用无限重启掩盖错误。

5. **启动修复参考**

fixed.cjs为缺省rate提供450，拒绝无效值，进入可观察运行状态。用harness lifecycle start创建本题命名进程。

6. **检查重启计数**

回读pm2 jlist核对online、restart_time=0。运行成功时仍应确认日志和业务值，不只截图绿色状态。

7. **清理独立会话**

只删除本题lesson-fixture并关闭本题PM2_HOME守护器。保存describe、logs和stable字段，不能对默认用户PM2执行全局清理。

## 来源

- https://raw.githubusercontent.com/HKUDS/CLI-Anything/main/pm2/agent-harness/PM2.md


## 原生工具与边界补充

安装PM2和CLI-Anything官方pm2/agent-harness。所有调用必须指定较短LESSON_PM2_HOME，不能指向默认真实服务。ecosystem中script使用不含空格的相对路径，interpreter明确node，以免PM2将带空格绝对路径识别为shell命令。输出只保存白名单状态字段，不保存进程完整环境。
