# 排程語法

本頁列出 `Add` 接受的 spec 格式：五欄位 Cron 表達式、描述符與 `@every` 固定間隔。

## Cron 表達式

固定五欄位，以設定的 `Location` 計算：

| 欄位 | 範圍 |
|---|---|
| 分 | 0-59 |
| 時 | 0-23 |
| 日 | 1-31 |
| 月 | 1-12 |
| 週 | 0-6（0 為週日） |

| 語法 | 範例 | 比對規則 |
|---|---|---|
| `*` | `*` | 任意值 |
| `n` | `30` | 等於 n |
| `n-m` | `9-17` | 介於 n 與 m（含） |
| `a,b,n-m` | `0,30` | 列表，可混用範圍，重複值去除 |
| `*/n` | `*/15` | 欄位值可被 n 整除 |

`*/n` 比對的是欄位值本身，而非從欄位最小值起算的位移：日欄位的 `*/5` 符合 5、10、15、20、25、30 日，月欄位的 `*/2` 符合偶數月。不支援 `n-m/s` 形式與月份、星期的英文名稱。下次觸發時間由下一分鐘開始逐分鐘遞增，直到五個欄位全部符合。

## 描述符與固定間隔

| spec | 等同 |
|---|---|
| `@yearly`、`@annually` | `0 0 1 1 *` |
| `@monthly` | `0 0 1 * *` |
| `@weekly` | `0 0 * * 0` |
| `@daily`、`@midnight` | `0 0 * * *` |
| `@hourly` | `0 * * * *` |
| `@every <duration>` | 以 `time.ParseDuration` 解析；最小 30 秒；下次觸發 = 本次觸發被處理的時間 + duration |

時區設定見 [設定](/zh/configuration#排程器設定)，解析錯誤見 [任務 API](/zh/api-reference-tasks#add)。
