定时任务
定时任务
参考地址
https://www.jianshu.com/p/fd3dda663953
扩展
go get -u github.com/robfig/cron
example
比如我们的手机卡假设都是在每个月的开始时间就更新资费:
"0 0 0 1 * *" // 表示每个月1号的00:00:00
"0 1 1 1 * *" // 表示每个月1号的01:01:00
每隔5秒执行一次:"*/5 * * * * ?"
每隔1分钟执行一次:"0 */1 * * * ?"
每天23点执行一次:"0 0 23 * * ?"
每天凌晨1点执行一次:"0 0 1 * * ?"
每月1号凌晨1点执行一次:"0 0 1 1 * ?"
在26分、29分、33分执行一次:"0 26,29,33 * * * ?"
每天的0点、13点、18点、21点都执行一次:"0 0 0,13,18,21 * * ?"
pre-defined schedules
Entry | Description | Equivalent To |
---|---|---|
@yearly (or @annually) | 每年一次,1月1日午夜 | 0 0 0 1 1 * |
@monthly | 每月运行一次,午夜,月初 | 0 0 0 1 * * |
@weekly | 每周跑步一次,周六和周日之间的午夜 | 0 0 0 * * 0 |
@daily (or @midnight) | 每天午夜跑步一次 | 0 0 0 * * * |
@hourly | 每小时运行一次,每小时开始 | 0 0 * * * * |
@every | 每段时间 |
案例
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") })
图文解释
┌─────────────second 范围 (0 - 60)
│ ┌───────────── min (0 - 59)
│ │ ┌────────────── hour (0 - 23)
│ │ │ ┌─────────────── day of month (1 - 31)
│ │ │ │ ┌──────────────── month (1 - 12)
│ │ │ │ │ ┌───────────────── day of week (0 - 6) (0 to 6 are Sunday to
│ │ │ │ │ │ Saturday)
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * *
匹配符号
星号(*) :表示 cron 表达式能匹配该字段的所有值。如在第5个字段使用星号(month),表示每个月
斜线(/):表示增长间隔,如第2个字段(minutes) 值是 3-59/15,表示每小时的第3分钟开始执行一次,之后 每隔 15 分钟执行一次(即 3(3+0*15)、18(3+1*15)、33(3+2*15)、48(3+3*15) 这些时间点执行),这里也可以表示为:3/15
逗号(,):用于枚举值,如第6个字段值是 MON,WED,FRI,表示 星期一、三、五 执行
连字号(-):表示一个范围,如第3个字段的值为 9-17 表示 9am 到 5pm 直接每个小时(包括9和17)
问号(?):只用于 日(Day of month) 和 星期(Day of week),表示不指定值,可以用于代替 *
常用任务
每隔5秒执行一次:*/5 * * * * ?
每隔1分钟执行一次:0 */1 * * * ?
每天23点执行一次:0 0 23 * * ?
每天凌晨1点执行一次:0 0 1 * * ?
每月1号凌晨1点执行一次:0 0 1 1 * ?
在26分、29分、33分执行一次:0 26,29,33 * * * ?
每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
*/ 和 0/ 的区别
- 0 0/10 * * * 与 0 */10 * * * 的差别在于什么地方
0 0/10 * * * 与 0 */10 * * * 的差别在于什么地方。 在说这两者的差别之前,先说下各个字符代表的含义。0代表从0分开始,*代表任意字符,/代表递增。 也就是说0 0/10 * * *代表从0分钟开始,每10分钟执行任务一次。0 */10 * * *代表从任务启动开始每10分钟执行任务一次。有人会问,这不是一样的么? 答案是不一样的。因为起始的时间不一样。例如:从5:07分钟的时候执行该任务第一种写法会在5:10的时候进行执行,写法二会在5:17进行执行。这就是两者的差别。 当然0 0/1 * * * 与0 */1 * * *有时会被认为是同一种写法
本作品采用《CC 协议》,转载必须注明作者和本文链接
不是
crontab
吧?