退出码
脚本使用退出码判断结果,具体原因读取错误诊断。SOW 各命令使用相同的退出码含义。
| 退出码 | 含义 | 下一步 |
|---|---|---|
0 |
成功或无需变更 | 查看结果;无需变更时可能报告 noop: true |
1 |
运行时 I/O、包解析、渲染或其他未分类错误 | 修正诊断指出的输入或环境问题后重试 |
2 |
命令、工作区查找或配置错误 | 检查 sow help COMMAND、选择参数和 sow config check |
3 |
部分成功 | 查看结果,区分已提交工作与失败项 |
4 |
无法取得写锁 | 稍后重试或增加 --timeout |
5 |
完整性/恢复错误,或仓库尚不可交付 | 查看 status、check;构建脏仓库或恢复已记录操作 |
6 |
操作被拒绝 | 修正错误指出的冲突、包引用、架构、签名或保护设置 |
130 |
命令收到 SIGINT 或 SIGTERM 而中断 | 按中断操作的类型选择恢复命令 |
成功不一定表示可以交付
只要能够报告状态,status 就返回 0,包括 dirty、recovering、error。
其 ready_to_copy 字段是状态摘要,不是完整字节检查。交付前使用 check:
脏仓库的旧索引可以完全一致,但由于期望状态尚未构建,check 仍返回 5。
运行 build 后再检查。如果诊断指出包损坏或恢复证据冲突,先查明该错误;
具体处理方法见故障处理。
部分成功
add 返回 3,表示 SOW 接受或复用了至少一个输入,同时至少一个输入失败。
JSON 结果保留每个输入的处理结果。策略排除不算输入失败。
init 在创建部分已声明对象、后续对象失败时,也可能返回 3。
prune 在发布筛选后的索引或删除至少一个 RPM 后发生错误时,同样返回 3。
先保存输出与退出码,再决定是否继续:
mirror 必须是 demo 的已配置发布目标。此脚本在部分成功时停止,
以便先检查失败输入,再决定发布。
等待锁与中断
默认 -T 0 一直等待写锁,-T 30s 最多等待 30 秒,-N 只尝试一次。
占锁时返回 4;-N 与非零 -T 同用返回 2。
只读命令不接受这些选项。部分读命令使用共享锁获取一致快照;
status 无需等待仓库写者即可报告写锁状态。
SOW 处理 Ctrl-C 或 SIGTERM 中断时返回 130。上传进度超时等内部超时保留其普通错误分类。
中断不会撤销已经提交的工作。先检查状态,再按事务与恢复
中对应的流程继续操作。
JSON 错误
使用 --json 时,stdout 输出结果封装,stderr 输出诊断。
errors 数组使用下列分类:
| 退出码 | JSON class |
|---|---|
1 |
runtime |
2 |
usage、discovery 或 config |
3 |
partial |
4 |
lock |
5 |
integrity |
6 |
rejected |
130 |
interrupted |
按退出码或分类判断,不解析错误消息文本。Plain create 与 prune 向 stderr 打印其内部错误,
JSON 消息可能额外包含 CLI 分类前缀。即使 ok 为 false,诊断和部分成功结果也会保留。