沙箱运行日志打包
Overview
把沙箱的运行日志目录(默认 /root/proxy/data/logs/)全量打包成带时间戳的 .zip,输出到当前工作区,并通过 present_files 交付给用户。打包过程跳过正在被写入而无法读取的日志文件,不会中断整体流程。
工作流
1. 确定日志目录
按以下优先级确定目标目录:
- 用户本次对话显式给出的路径
- 环境变量
SANDBOX_LOG_DIR - 默认
/root/proxy/data/logs/
不要凭猜测改路径。若默认目录不存在,先向用户确认实际路径,而不是自行换成别的目录。
2. 运行打包脚本
python3 /Users/aterzhang/.workbuddy/skills/sandbox-log-fetch/scripts/pack_logs.py \
--log-dir /root/proxy/data/logs \
--output-dir <当前工作区绝对路径> \
--name sandbox-logs
参数说明:
- --log-dir:日志目录,默认 /root/proxy/data/logs(也读 SANDBOX_LOG_DIR)
- --output-dir:压缩包输出目录,默认当前目录(也读 SANDBOX_LOG_OUTPUT_DIR)。务必传当前工作区内的路径,便于后续展示文件
- --name:压缩包名前缀,最终文件名形如 sandbox-logs-20260917-204500.zip
脚本成功时以 KEY: value 格式打印 SOURCE_DIR、ARCHIVE、FILES、SIZE。
3. 处理退出码
| 退出码 | 含义 | 处置 |
|---|---|---|
| 0 | 打包成功 | 进入第 4 步 |
| 2 | 目录不存在、无读权限或写压缩包失败 | 把 stderr 原文告知用户;权限问题提示用提权方式重跑 |
| 3 | 目录为空 | 告知用户目录为空,未生成压缩包 |
4. 交付
用 present_files 传入脚本打印的 ARCHIVE 绝对路径,并在回复中说明:日志目录、文件数、压缩包体积。
注意事项
- 日志目录可能很大(GB 级):打包前无需逐一统计,脚本自身会输出压缩前后体积;若压缩包超过几百 MB,提醒用户解压后查看。
- 归档内使用相对于日志目录的相对路径,解压后不会带上
/root/proxy/data/logs这样的深层前缀。 - 打包期间日志仍可能被写入,脚本会跳过读取失败的文件并在 stderr 打印
WARN: skipped ...;把这些被跳过的文件如实报告给用户。 - 只做打包交付,不要删除或修改源日志文件。