Docs/ 运维/ 定时任务

定时任务

调度在容器内运行的定期任务。从数据库清理到报告生成,定时任务可按定义的计划自动执行重复操作。

创建定时任务

定时任务在服务级别创建。每个任务在服务的运行中容器内执行命令。

  1. 导航到堆栈中的服务。
  2. 点击 定时任务 选项卡。
  3. 点击 添加定时任务
  4. 输入描述性名称(例如「每日数据库清理」)。
  5. 输入计划的 cron 表达式。
  6. 输入要执行的命令(例如 python manage.py cleanup)。
  7. 点击 创建
Create cron job dialog -- name field, cron expression input with a human-readable preview, and command input
Note
命令在与你的服务相同的容器内运行,使用相同的环境变量、文件系统和网络。这意味着它可以访问你的数据库、配置文件和应用代码。

Cron 表达式语法

sh0 使用标准的 5 字段 cron 表达式。每个字段代表一个时间单位:

Cron expression format
┌───────────── 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 分钟

常见模式

Frequently used cron schedules
# 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 会跳过新的执行以防止重叠。跳过的执行会以「已跳过(重叠)」状态记录。