下载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位长度来指定表达式的。

所以,具体使用哪个包,最好下载更新最新版本,表达式的语法也要通过实际测试进行验证,保证任务按照我们指定的时间执行。

公众号:李田路口