计划任务
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会向前重新计算,绝不回填。
Cron 格式与校验
Section titled “Cron 格式与校验”Pier 接受常规的 5 字段 cron 格式(m h dom mon dow),以及常见的快捷写法 @hourly、@daily、@weekly、@monthly 和 @yearly。在你创建或编辑计划时表达式会被校验——无效表达式会连同解析器的错误一起被拒绝。还有一个校验端点会预览给定表达式和时区的接下来几次触发时间,因此你可以在保存前确认计划会按你预期的方式工作。