定时任务
用于创建和维护需要周期执行的定时任务。
概述
通过 应用开发中心 → 任务管理 可以进入定时任务管理界面。
定时任务是自动化运维的重要组成部分,通过定时任务可以自动执行周期性的业务操作:
- 数据统计:定期生成统计报表
- 数据清理:定期清理过期数据
- 数据同步:定期同步外部数据
- 消息推送:定期发送通知消息
任务监控
可以通过定时任务详情查看最近一次执行任务的触发时间和执行状态以及耗时情况。
通过开发页面提供的查看日志功能可以跳转到日志界面,如果发生错误可以辅助开发人员排查错误。
2024-04-09 09:16:43,712 [.NET TP Worker] DEBUG Logger.? [?] - (null) (null) MESSAGE: job [45ae850c-0031-4a0c-b32f-549cecd4994e] loaded.
2024-04-09 09:16:50,011 [.NET TP Worker] DEBUG Quartz.Simpl.SimpleJobFactory.? [?] - (null) (null) MESSAGE: Producing instance of Job 'DEFAULT.45ae850c-0031-4a0c-b32f-549cecd4994e', class=Chameleon.Application.Jobs.ChameleonScheduleJob
2024-04-09 09:16:50,022 [.NET TP Worker] DEBUG Quartz.Core.JobRunShell.? [?] - (null) (null) MESSAGE: Calling Execute on job DEFAULT.45ae850c-0031-4a0c-b32f-549cecd4994e
2024-04-09 09:16:50,022 [.NET TP Worker] DEBUG Quartz.Core.QuartzSchedulerThread.? [?] - (null) (null) MESSAGE: Batch acquisition of 1 triggers
2024-04-09 09:16:50,031 [.NET TP Worker] DEBUG Quartz.Core.JobRunShell.? [?] - (null) (null) MESSAGE: Trigger instruction : NoInstruction
创建定时任务
定时任务的创建需要指明业务接口和 Crontab 表达式:
- 业务接口:用于指明定时任务触发时调用的业务逻辑
- Crontab 表达式:用于指明定时任务执行的时机和频率
业务接口配置
业务接口的配置参考 平台接口 文档。
Crontab 表达式
定时任务组件使用 Quartz 组件,因此 Crontab 规范为 Quartz Crontab 规范。
表达式格式
秒 分 时 日 月 周 [年]
* * * * * * *
字段说明
| 字段 | 允许值 | 特殊字符 |
|---|---|---|
| 秒 | 0-59 | , - * / |
| 分 | 0-59 | , - * / |
| 时 | 0-23 | , - * / |
| 日 | 1-31 | , - * ? / L W |
| 月 | 1-12 | , - * / |
| 周 | 1-7 | , - * ? / L # |
| 年 | 1970-2099 | , - * / |
特殊字符说明
| 字符 | 说明 | 示例 |
|---|---|---|
| * | 所有值 | * * * * * ? 每秒执行 |
| ? | 不指定值 | 日和周字段互斥时使用 |
| - | 范围 | 0 0 9-17 * * ? 9点到17点每小时执行 |
| , | 枚举 | 0 0 9,12,15 * * ? 9、12、15点执行 |
| / | 间隔 | 0 0/5 * * * ? 每5分钟执行 |
| L | 最后 | 0 0 0 L * ? 每月最后一天执行 |
| W | 工作日 | 0 0 0 15W * ? 最近工作日执行 |
常用表达式示例
| 表达式 | 说明 |
|---|---|
0 0/1 * * * ? | 每分钟执行 |
0 0 * * * ? | 每小时执行 |
0 0 0 * * ? | 每天零点执行 |
0 0 9 * * ? | 每天上午9点执行 |
0 0 9 * * MON-FRI | 周一到周五上午9点执行 |
0 0 0 1 * ? | 每月1号零点执行 |
0 0 0 L * ? | 每月最后一天零点执行 |
在线工具
可以通过在线工具辅助配置 Crontab,在线工具可以帮助我们了解接下来执行的时机,让开发人员可以快速检验 Crontab 表达式是否正确:
任务管理
任务状态
| 状态 | 说明 |
|---|---|
| 启用 | 任务正常执行 |
| 禁用 | 任务暂停执行 |
| 执行中 | 任务正在执行 |
任务操作
| 操作 | 说明 |
|---|---|
| 启用 | 启用禁用的任务 |
| 禁用 | 暂停任务执行 |
| 立即执行 | 手动触发任务执行 |
| 查看日志 | 查看执行历史记录 |
| 编辑 | 修改任务配置 |
| 删 除 | 删除任务 |
配置生效说明
调度配置由调度节点每分钟与数据库对账同步一次。因此新建、编辑(包括业务接口、执行参数、Crontab 表达式)以及启用/禁用之后,最长需要约 1 分钟才会在后续调度中生效。编辑后任务在下一轮对账前仍会按旧配置执行,请合理安排时间窗口,避免对线上产生预期外的影响。
最佳实践
任务设计
- 任务逻辑尽量简单,避免复杂计算
- 大数据量处理分批执行
- 设置合理的超时时间
错误处理
- 配置失败重试机制
- 记录详细的错误日志
- 设置告警通知