用途 该技能用于让本地命令在当前 Tariboy 迭代结束之后继续执行,或按固定时间间隔重复执行。脚本的启动器 scripts/scripts.sh 位于技能目录内,通过 TARIBOY_TOOLS_SOCKET 调用与身份绑定的守护进程。当命令执行可用时运行该启动器;若不可用,则返回确切命令,不得在命令未成功执行的情况下声称脚本已被排队、调度、重跑、取消或删除。
主要能力
- 一次性运行:使用 scripts/scripts.sh run <name> -- <command>。它只排队一次,当前迭代随即结束,之后消费 script.result 消息,而不是在当前迭代中等待。
- 定期运行:使用 scripts/scripts.sh schedule <name> --every <seconds> -- <command>。运行不会重叠。只有以 $TARIBOY_QUIET_EXIT(111)退出的运行不发布任何消息并保留调度;这是唯一保持调度继续的结果。守护进程会把该退出码导出到每次运行:Shell 命令用 exit "${TARIBOY_QUIET_EXIT:-111}",Python 用 sys.exit(int(os.environ.get("TARIBOY_QUIET_EXIT", "111")))。
- 查看与管理:用 scripts/scripts.sh ls、scripts/scripts.sh runs、scripts/scripts.sh logs 进行检查;用 scripts/scripts.sh rerun、scripts/scripts.sh cancel、scripts/scripts.sh rm 进行生命周期控制。
寻址要求 rerun、cancel 和 rm 只接受 scr-… 脚本 ID 或 srun-… 运行 ID。名称不唯一且不会被解析:传名称会以 not found 失败;run <name> -- <command> 会创建第二个定义,而不是恢复已停止的那个。脚本 ID 可从唤醒你的 script.result 消息的 script_id 字段、创建时的输出,或 scripts/scripts.sh ls 中获取。在任何记录持久化监控的地方,都要记录脚本 ID 而不只是名称。
已发布结果会停止调度 定期定义只在每次运行都保持静默时保留调度。一旦某次运行发布了 script.result 消息,守护进程就把该定义设为 completed 并清除其下一次运行:代理只被通知一次而不是反复通知,且在恢复之前不会再运行。这适用于所有已发布结果的情况:
- 以 $TARIBOY_QUIET_EXIT(111)退出:无消息,调度继续运行。
- 以任何其他退出码退出(成功或失败):发布结果,定义停止。
- 命令从不以 $TARIBOY_QUIET_EXIT 退出:每次运行都会发布,因此第一次运行后调度停止。
- cancel <run-id> 取消单个活动运行:该运行仍会发布结果,因此定义也会停止。
- 运行被守护进程重启打断:恢复过程会发布被中断的结果,因此定义停止。
- cancel <script-id>:定义被取消,永远不会再运行。
处理定期定义的 script.result 处理结果后,必须在本次迭代结束前用以下两种决策之一将其关闭,两者都不做会静默结束观察。
- 仍然需要——恢复同一定义:scripts/scripts.sh rerun <script-id>。rerun 立即运行并把定义恢复为 active,之后其固定延迟继续生效。不要为已停止定义所描述的工作创建替代调度。
- 不再需要——移除它:scripts/scripts.sh rm <script-id>。已发布结果已将其停止,因此无需 cancel。只有在 ls 仍报告 state: active 时,才先运行 scripts/scripts.sh cancel <script-id>。 已停止的定义不是等待对象。不要在一次迭代结束时把已发布结果的定义描述为活动监控:它要么在本次迭代中用 rerun 恢复,要么本次迭代的等待对象是别的东西。
外部前提失败 对于因外部前提(如缺少凭据、二进制文件或依赖)而未成功、且在前提改变前无法成功的定期调度,它不再是有效的等待对象。其失败结果已经将其停止,因此走上面分支 2,绝不要重跑它:scripts/scripts.sh rm <script-id>。只有在 ls 仍报告 state: active 时才先运行 scripts/scripts.sh cancel <script-id>。然后对于 Native Task:提及客户并询问一个阻塞性问题,复用匹配的未回答的问题而不是新建或重复;若任务尚未处于该状态,将其设为 wait_customer,并把该问题记录为唯一的恢复事件;作为最后一个动作,通过 loop 技能以 scripts/loop.sh done 结束本次迭代。只有在定义被移除、任务有一个客户回答等待、且迭代已完成之后,失败才算处理完毕。省略其中任何一项的动作轨迹都是不完整的。暂停或禁用会留下无用的定义,不能完成此序列。在问题仍未回答期间,不要重跑命令、创建替代调度或重复失败评论。
限制与注意事项
- 名称不会被解析,只能使用 scr-… 或 srun-… ID。
- 取消单个运行仍会发布结果并停止定义。
- 用新调度恢复监控会产生重复工作;应使用 rerun <script-id> 恢复已记录的那个。
- 成功不是静默:只有 $TARIBOY_QUIET_EXIT(111)才算静默。