下载cron包:
开启一个定时:
根据cron表达式进行时间调度,cron可以精确到秒,大部分表达式格式也是从秒开始。
c := cron.New()默认从分开始,所以加上cron.WithSeconds(),保证定时按照表达式字面意思执行。
停止定时:
由于goroutine没有线程id,所以无法从外部停止指定的定时任务。cron自带Stop()方法,支持在方法体里使用,来停止当前定时。
何时调用Stop()方法,需要根据自身业务触发,例如运行完成100次后停止,数据库当前状态为注销时停止,等等。
开启多个定时:
一个c对象可以加载多个定时任务,此时在其中一个方法里调用Stop()方法,所有定时任务都会停止。
常见cron表达式:
表达式如果算上年份,共7位:
秒 分 时 日 月 周 年
实际应用中很少用到年份,所以一般表达式都是6位:
秒 分 时 日 月 周
*/1 * * * * ? 每秒
00 * * * * ? 每分
00 30 22 * * ? 每天晚上22:30
00 30 22 * * 2 每周二晚上22:30
00 30 22 * * 1,3 每周一和周三晚上22:30
*/5 35 10 * * 1-3 每周一到周三上午10点35分00秒开始第一次,然后每5秒一次
00 10,40 14 ? 3 4 每年三月的星期四的下午14:10和14:40
需要更复杂更细致的表达式写法,可自行上网查找。
注意:
网上有很多不同的cron包,同一个包版本也有多个,整体用法虽相似,但对cron表达式的处理会有一定差别,例如c := cron.New()有直接从秒开始的,不用加cron.WithSeconds(),也有用5位长度来指定表达式的。
所以,具体使用哪个包,最好下载更新最新版本,表达式的语法也要通过实际测试进行验证,保证任务按照我们指定的时间执行。
公众号:李田路口