# Cron 监控

Source: https://instatus.com/help/zh/monitoring/cron

Cron 监控为每个定时任务（备份、批处理或周期性脚本）提供一个唯一的 URL 供其 ping，并在 ping 迟到或缺失时通知你。任务错过周期时会被标记为降级，连宽限期也错过时则标记为故障。

和[其他监控](https://instatus.com/help/zh/monitoring)一样，当 cron 任务失败时，你可以和团队协作[解决该事件](https://instatus.com/help/zh/incident-response)，也可以选择更新你的[状态页](https://instatus.com/help/zh/status-page)。

| At a glance | Details |
| :-- | :-- |
| [工作原理](https://instatus.com/help/zh/monitoring/cron#监控类型) | 任务每次运行时 ping 一个唯一 URL |
| [周期时间](https://instatus.com/help/zh/monitoring/cron#满足以下条件时视为监控成功) | 任务应多久运行一次 |
| [宽限期](https://instatus.com/help/zh/monitoring/cron#满足以下条件时视为监控成功) | 迟到任务被标记为故障前的额外时间 |
| [迟到的 ping](https://instatus.com/help/zh/monitoring/cron#满足以下条件时视为监控成功) | 超过周期为降级，超过宽限期为故障 |
| [失败信号](https://instatus.com/help/zh/monitoring/cron#主动上报失败) | 请求末尾追加 /fail 的 URL |
| [执行时间](https://instatus.com/help/zh/monitoring/cron#测量任务执行时长) | 开始时 ping /start，结束时 ping 该 URL |

下面是 cron 监控列表的示例：

![cron 监控列表](https://instatus.com/help/monitors/cron-list.png)

## Cron 监控有什么用？

- 验证 cron 任务是否按时运行（依靠任务发来的 ping）。
- 任务延迟或没有完成时收到告警。
- 通过 Slack、邮件、短信、电话呼叫等方式接收告警。

点击某个 cron 监控后，你可以看到更多详情：

![cron 监控详情](https://instatus.com/help/monitors/cron-item.png)

## 如何添加 cron 监控？

进入你的项目 → 监控 → 添加监控，选择 **Cron / 心跳**，然后让你的任务请求生成的 URL，并设置它的周期和宽限期。

![添加监控](https://instatus.com/help/monitors/cron-add.png)

### 监控类型

选择 **Cron/心跳**作为监控类型。

![cron 监控类型](https://instatus.com/help/monitors/type-cron.png)

系统会为你生成一个唯一的 URL。你的 cron 任务每次运行时都应该向这个 URL 发送一个 HTTP 请求（`HEAD`、`GET` 或 `POST`）。

### 满足以下条件时视为监控成功

当任务按计划 ping 生成的 URL 时，cron 监控就算成功。你可以配置：

- **周期：**任务应该多久运行一次（例如每 15 分钟）。
- **宽限期：**在判定任务故障之前额外允许的时间。

如果到了周期时间任务仍未 ping，监控会被标记为性能下降。

如果到了宽限期任务仍未 ping，监控会被标记为故障。

你可以设置[告警](https://instatus.com/help/zh/monitoring/alerts)，在任务故障、性能下降或恢复时收到通知。

## 主动上报失败

向监控 URL 末尾追加 `/fail` 发送请求，即可把任务标记为失败，即使它已经运行并 ping 了监控。

如果你的脚本遇到错误，想让 Instatus 立刻把该任务记录为失败，这就很有用。

- **成功 ping**：`https://cron.instatus.com/your-unique-url`
- **失败 ping**：`https://cron.instatus.com/your-unique-url/fail`

收到失败信号后，监控会被标记为故障，并立即按照你的[告警设置](https://instatus.com/help/zh/monitoring/alerts)发送告警。

## 测量任务执行时长

发送两次请求：任务开始时请求 `/start`，结束时发送成功或失败 ping，Instatus 会把两者之间的时间记录为任务的执行时间：

1. **开始信号**：任务开始时向 `/start` 发送请求
2. **成功/失败信号**：任务完成或失败时向基础 URL 发送请求

- **开始 ping**：`https://cron.instatus.com/your-unique-url/start`
- **成功 ping**：`https://cron.instatus.com/your-unique-url`
- **失败 ping**：`https://cron.instatus.com/your-unique-url/fail`

开始信号与成功信号之间的时间会被记录为任务的执行时长。这有助于你跟踪性能，找出耗时超出预期的任务。

如果任务在发送开始信号之后失败了，请发送失败信号而不是成功信号，这样既标记为失败，也能记录执行时长。

恭喜，你已经添加了第一个 cron 监控！

- [Ping 监控](https://instatus.com/help/zh/monitoring/ping): 了解如何监控 ping 端点的可用性和性能
