跳转到内容

计划任务

Pier 让你在服务器上运行 shell 命令——既可按需运行,也可按 cron 计划运行——并将可复用的命令存储为模板。触发这些任务的同一个调度器也驱动备份和 Docker 清理。

模板是一条已保存的 shell 命令外加一组默认值:名称、可选描述、默认超时和默认环境变量映射。模板是可复用的构建单元——选一个,选定服务器,然后运行。

你可以通过两种方式启动一次运行:从模板,或使用内联的一次性命令。如果两者都提供,则内联命令优先。每次运行针对一台服务器,接受可选的环境覆盖,以及一个超时(默认 1800 秒,限定在 1 秒到 24 小时之间)。

命令在目标服务器的 pier-agent 上运行,Pier 大约每秒轮询一次代理,将 stdout、stderr 和状态镜像回运行记录——因此 UI 显示近乎实时的日志尾部。一次运行会以下列某个终止状态结束:

状态含义
success / failed代理已完成;查看退出码
cancelled你取消了它(代理被告知停止)
timeout超过了该运行的超时
unreachable无法联系到代理

任务通过 pier-agent 运行。本地服务器和 peer 类型的服务器不以这种方式运行 shell 任务。

一个计划为一个操作附加一个 cron 表达式和时区。存在三种操作类型:

操作它做什么
task在所选服务器上运行一个任务模板
backup触发一个备份计划
cleanup运行 Docker 清理流水线

备份和清理计划在它们各自的界面中管理,但会出现在这里的统一计划列表中,因此你有一个统一的地方来查看何时运行什么。每个计划都保留其近期运行的历史,你可以启用、禁用或立即运行其中之一。

单个调度器每 60 秒 tick 一次,并触发任何下次运行时间已过的计划。它在重叠和漏跑方面刻意保守:

  • 不重复触发。 如果一个计划的上一次运行仍在进行中,新的 tick 会记录一次 skipped 运行,而不是启动第二次。
  • 不重放。 长时间停机只会跳过本应发生的那些运行;next_run_at 会向前重新计算,绝不回填。

Pier 接受常规的 5 字段 cron 格式(m h dom mon dow),以及常见的快捷写法 @hourly@daily@weekly@monthly@yearly。在你创建或编辑计划时表达式会被校验——无效表达式会连同解析器的错误一起被拒绝。还有一个校验端点会预览给定表达式和时区的接下来几次触发时间,因此你可以在保存前确认计划会按你预期的方式工作。