定时任务会在指定时间无人值守地运行智能体任务,无需让你的机器保持在线。每次运行都会 根据已保存的 kit 和配置创建一个全新的云沙箱。任务结束或存活时间(TTL)到期时,沙箱 即被删除,以先发生者为准。请指示任务在退出之前把结果保存到外部目标。
定时任务适用于依赖项审查、issue 摘要这类周期性的工作。对于由 CI 系统触发的作业, 请参阅 CI 与无头使用。对于从文件配置的交互式会话,请 参阅云端环境文件。要在 Web 界面中管理定时任务,请参阅 Docker Agentic Platform 中的定时任务。
创建定时任务
定时任务需要云端访问权限、账号的定时任务权限,以及提供 sbx --cloud schedule --help 的 CLI。用 sbx login 登录,以授权无人值守的运行。 关于凭据有效期和登录要求,请参阅更新定时任务凭据。
选择某个已发布的 kit,例如 claude,或一个 oci:// 引用。不支持本地 kit 路径和 git+ 引用。该 kit 必须包含任务所需的工具,并且能够在没有交互输入的情况下接受一段 提示词或命令。
为智能体及其使用的服务配置云凭据。例如,一个 issue 摘要任务需要 一个 Anthropic API 密钥,以及一个拥有读取 issue 和发表评论权限的 GitHub 令牌:
$ sbx --cloud secret set anthropic
$ sbx --cloud secret set github下面的定时任务每周把摘要发布到一个 GitHub 跟踪 issue 上,因此它的输出能在沙箱删除后 依然保留。请把仓库和 issue 占位符替换为你能控制的目标。--enabled=false 会在你 测试任务之前,让周期性运行保持暂停。
$ sbx --cloud schedule create claude \
--name weekly-issue-summary \
--cron '0 9 * * 1' \
--timezone Etc/UTC \
--enabled=false \
--max-run-duration 1h \
--workdir /home/agent \
--env REPOSITORY=<OWNER>/<REPOSITORY> \
--env TRACKING_ISSUE=<ISSUE_NUMBER> \
--allow-network api.github.com:443 \
--prompt 'Use the GitHub REST API to summarize up to ten open issues in REPOSITORY, excluding pull requests and TRACKING_ISSUE. Post their titles and links as one comment on TRACKING_ISSUE. Skip duplicate summaries. Stop on API errors. Do not modify code or other issues, or ask for input.'请保存返回的定时任务 ID。这些命令接受的是 ID,而不是定时任务名称。请在用于智能体 任务的 --prompt 和用于 shell 命令的 --command 之间恰好选择一个。
设置执行频率
--cron 接受一个带引号的五段表达式:分钟、小时、日、月和星期几。例如, '0 9 * * 1' 表示每周一 09:00 运行。请显式设置 --timezone 为某个 IANA 时区, 例如 Etc/UTC。
配置每次运行
| 设置 | 行为 |
|---|---|
--max-run-duration | 运行时长上限,至少为 1h。默认为 1h。请用它代替 --ttl。 |
--cpus、--memory | 覆盖 kit 的资源默认值。 |
--workdir、-w | 任务在沙箱中运行所在的目录。--working-dir 是它的别名。该目录必须已存在。这不会上传宿主机项目。 |
--env KEY=VALUE | 设置任务参数。不接受只写 --env KEY 的形式。请把凭据存放在密钥存储中。 |
--allow-network | 声明任务所需的目标地址。请参阅云端网络策略并测试服务访问。 |
每次运行都不会带上你的宿主机工作区。请让任务从外部服务获取它的输入。不要假设本地 网络策略会应用到定时沙箱上,也不要认为只配置了一条规则就能证明其已被强制执行。
测试定时任务
排队一次手动运行,即使周期性运行正处于暂停状态也可以:
$ sbx --cloud schedule run <SCHEDULE_ID>
$ sbx --cloud schedule runs <SCHEDULE_ID>
$ sbx --cloud schedule runs inspect <SCHEDULE_ID> <RUN_ID>使用 run 或 runs 返回的运行 ID。检查会显示状态、失败原因、可用的退出码以及耗时。 排队一次运行并不能确保成功:请等待其完成,并检查外部结果,例如跟踪 issue 上的评论。
如果另一次运行正在进行,服务会把这次额外的运行作为重叠运行取消。请等待正在进行的 运行结束后再重试。
列出和检查定时任务
列出定时任务,并检查它们的频率、状态、kit 和下次运行时间:
$ sbx --cloud schedule ls
$ sbx --cloud schedule inspect <SCHEDULE_ID>启用或暂停定时运行
在验证过一次测试运行之后,启用定时任务:
$ sbx --cloud schedule update <SCHEDULE_ID> --enabled=true用 --enabled=false 暂停周期性运行:
$ sbx --cloud schedule update <SCHEDULE_ID> --enabled=false修改定时任务设置
修改 --name、--description、--cron、--timezone 或 --enabled 会保留已保存的 运行配置。例如,把每周的运行时间改到 UTC 10:00:
$ sbx --cloud schedule update <SCHEDULE_ID> --cron '0 10 * * 1' --timezone Etc/UTC替换任务或运行配置
如果你传入 kit 参数,或者修改某项运行设置(例如提示词、时长、环境变量或工作目录), schedule update 会替换未来运行所使用的已保存配置。它不会把这些改动与已保存的运行 设置合并。请重复写出 --prompt 或 --command,以及你想保留的每一项运行设置,即使 你只改动其中一个值。只包含 --name、--description、--cron、--timezone 或 --enabled 的更新会保留已保存的运行配置。
省略的运行设置会被重置,包括网络规则、时长、资源、平台、环境变量、工作目录和 --static-mcp 服务器选择。
例如,下面的命令会替换任务并设置两小时的时长上限。它同时会重置此前配置过的环境变量、 网络规则以及其他被省略的运行设置:
$ sbx --cloud schedule update <SCHEDULE_ID> claude \
--max-run-duration 2h \
--prompt 'Check the installed tool versions and report them. Do not ask for input.'如果想在修改时长的同时保留 issue 摘要任务,请复制它完整的 create 命令,把 create claude 换成 update <SCHEDULE_ID> claude,并把 --max-run-duration 改为 2h。请保留提示词和其余每个运行标志。CLI 会对重置发出警告,但不会保留被省略的 设置。请在替换配置之前先暂停周期性运行,恢复之前先做测试。
定时任务会保存已解析的 kit 和所选的账号密钥名称。请通过替换运行配置来获取已发布的 kit 变更或新增的凭据。如果不传入 kit 参数,替换操作会重新解析现有的 kit 引用。只 修改定时任务设置不会刷新 kit 或密钥。
CLI 拒绝替换那些保存了多个 kit、策略 ID 或沙箱环境的运行配置,因为它的标志无法保留 这些设置。请改用定时任务 API 来更新这类配置。你仍然可以用 CLI 修改它们的名称、 描述、频率、时区和启用状态。
更新定时任务凭据
当你的账号启用了定时任务功能时,交互式 sbx login 会登记一个定时任务凭据。该凭据 在 90 天后到期。请再次交互式登录来续期。使用 --password-stdin 的 PAT 登录不会 登记该凭据。
登录成功仍可能报告 schedule credential exchange failed。请处理该警告,并在依赖 定时任务之前测试一次运行。
从失败的运行中恢复
检查该次运行的失败原因和退出码,并检查外部结果。如果 Docker 凭据已过期,请再次运行 sbx login。如果出现身份验证或连接失败,请检查智能体凭据和服务访问权限。如果你 添加了密钥或更改了 kit,请替换运行配置并 带上所有必需设置。恢复周期性运行之前,请重新测试。
删除定时任务
$ sbx --cloud schedule rm <SCHEDULE_ID>删除操作会请求确认。--force 会跳过提示。删除定时任务会阻止后续运行,但不会立即 删除正在运行中的那次运行的沙箱。该沙箱可能会保留到它的超时时间为止。