定时任务
调度在容器内运行的定期任务。从数据库清理到报告生成,定时任务可按定义的计划自动执行重复操作。
创建定时任务
定时任务在服务级别创建。每个任务在服务的运行中容器内执行命令。
- 导航到堆栈中的服务。
- 点击 定时任务 选项卡。
- 点击 添加定时任务。
- 输入描述性名称(例如「每日数据库清理」)。
- 输入计划的 cron 表达式。
- 输入要执行的命令(例如
python manage.py cleanup)。 - 点击 创建。
Create cron job dialog -- name field, cron expression input with a human-readable preview, and command input
Note
命令在与你的服务相同的容器内运行,使用相同的环境变量、文件系统和网络。这意味着它可以访问你的数据库、配置文件和应用代码。
Cron 表达式语法
sh0 使用标准的 5 字段 cron 表达式。每个字段代表一个时间单位:
┌───────────── minute (0-59)
│ ┌───────────── hour (0-23)
│ │ ┌───────────── day of month (1-31)
│ │ │ ┌───────────── month (1-12)
│ │ │ │ ┌───────────── day of week (0-6, Sunday = 0)
│ │ │ │ │
* * * * *| 符号 | 含义 | 示例 |
|---|---|---|
| * | 所有值 | * * * * * = 每分钟 |
| , | 值列表 | 0 8,12,18 * * * = 上午 8 点、中午、下午 6 点 |
| - | 范围 | 0 9-17 * * * = 上午 9 点到下午 5 点每小时 |
| / | 步长 | */15 * * * * = 每 15 分钟 |
常见模式
# Every minute
* * * * *
# Every 5 minutes
*/5 * * * *
# Every hour at minute 0
0 * * * *
# Every day at midnight
0 0 * * *
# Every day at 3:30 AM
30 3 * * *
# Every Monday at 9:00 AM
0 9 * * 1
# First day of every month at midnight
0 0 1 * *
# Every weekday (Mon-Fri) at 6:00 AM
0 6 * * 1-5 Tip
输入 cron 表达式时,sh0 会显示人类可读的预览(如「每天凌晨 3:30」),以便你在保存前验证。
选择目标容器
当服务有多个副本时,你需要决定哪个容器运行定时任务。sh0 提供两种执行模式:
- 单实例(默认)-- 任务仅在一个容器中运行,防止重复执行。这适用于数据库迁移、报告生成或任何不应并发运行的任务。
- 所有实例 -- 任务在每个副本中运行。适用于缓存预热、本地文件清理或需要在每个实例上运行的任务。
Execution mode selector -- radio buttons for 'Single instance' and 'All instances' with descriptions
执行历史与日志
每次定时任务执行都会记录其开始时间、结束时间、退出码和输出。可从定时任务详情页查看执行历史。
Cron job execution history table -- showing timestamps, duration, exit codes (0 for success, non-zero for failure), and output preview
点击任何执行记录可查看完整的 stdout 和 stderr 输出。这对于调试失败的任务或验证任务是否正确完成非常有价值。
Cron job execution detail -- showing full command output with stdout and stderr streams
Note
sh0 为每个定时任务保留最近 100 次执行记录。旧记录会自动清理以保持数据库精简。
启用和禁用任务
你可以临时禁用定时任务而不删除它。这在维护窗口期间或调试由定时任务引起的问题时非常有用。
- 切换定时任务卡片上的 已启用 开关来禁用或重新启用。
- 禁用的任务保留其配置和历史记录——不会丢失任何内容。
- 无论计划如何,你都可以点击 立即运行 来触发手动执行。
Cron job card with enabled/disabled toggle and a Run Now button
错误处理与重试
当定时任务以非零状态码退出时,sh0 将执行标记为失败。你可以配置自动重试和失败通知:
- 重试 -- 设置重试次数(0-5)和重试间隔。
- 超时 -- 设置最大执行时间。超过此限制的任务会被终止。
- 失败告警 -- 配置告警以在任务失败时收到通知。使用与指标告警相同的通知渠道。
Warning
如果定时任务在下一次计划执行到达时仍在运行,sh0 会跳过新的执行以防止重叠。跳过的执行会以「已跳过(重叠)」状态记录。