定时任务
Crontab 时间表达式
时间表达式格式
gocron 使用 Linux-crontab 时间表达式语法,支持秒级任务定义。
格式:秒 分 时 天 月 周
表达式示例
bash
1 * * * * * # 每分钟第一秒运行
*/20 * * * * * # 每隔20秒运行一次
0 30 21 * * * # 每天晚上21:30:00运行一次
0 0 23 * * 6 # 每周六晚上23:00:00运行一次快捷语法
gocron 支持以下快捷语法:
| 快捷语法 | 说明 | 等价表达式 |
|---|---|---|
@yearly | 每年运行一次 | 0 0 0 1 1 * |
@monthly | 每月运行一次 | 0 0 0 1 * * |
@weekly | 每周运行一次 | 0 0 0 * * 0 |
@daily | 每天运行一次 | 0 0 0 * * * |
@midnight | 每天午夜运行一次 | 0 0 0 * * * |
@hourly | 每小时运行一次 | 0 0 * * * * |
@every 30s | 每隔30秒运行一次 | - |
@every 1m20s | 每隔1分钟20秒运行一次 | - |
@every 3h5m10s | 每隔3小时5分钟10秒运行一次 | - |
执行方式
gocron 支持两种任务执行方式:
1. Shell 命令
在远程主机上执行 shell 命令。
示例:
bash
ps aux | grep gocron
cd /tmp && ls -la
echo "Hello, gocron!" > /tmp/test.txt注意
Shell 任务执行时间不能超过 86400 秒(24小时)
2. HTTP 请求
执行 HTTP-GET 请求。
示例:
https://api.example.com/task/run
http://localhost:8080/webhook注意
HTTP 任务执行时间不能超过 300 秒(5分钟)
任务配置
任务超时时间
任务执行超时后会被强制结束,默认为 0(不限制)。
- Shell 任务:最长执行时间不能超过 86400 秒
- HTTP 任务:最长执行时间不能超过 300 秒
任务执行失败重试
当出现以下情况时,任务会被标记为执行失败:
- 无法连接远程主机
- Shell 命令返回值非 0
- HTTP 响应码非 200
重试机制:
- 可设置重试次数(取值范围:1-10)
- 每次重试间隔时间 = 重试次数 × 1分钟
- 按 1分钟、2分钟、3分钟... 的间隔进行重试
示例:重试次数设置为 2
- 任务执行失败
- 休眠 1 分钟后,第一次重试
- 如果仍然失败,休眠 2 分钟后,第二次重试
- 如果还是失败,任务最终标记为失败
提示
默认值为 0,表示不重试
单实例运行
启用单实例运行后,如果上次任务未执行完成,下次任务将不会执行,任务日志状态会显示为"取消"。
这个功能可以防止任务重复执行,特别适用于执行时间较长的任务。
任务依赖
gocron 支持设置任务之间的依赖关系。当任务 A 依赖任务 B 时:
- 任务 A 会在任务 B 执行成功后才开始执行
- 如果任务 B 执行失败,任务 A 将不会执行