定时任务

  1. 初始化一个任务

    1. tk1 := task.NewTask("tk1", "0 12 * * * *", func(ctx context.Context) error { fmt.Println("tk1"); return nil })

    函数原型:

    NewTask(tname string, spec string, f TaskFunc) *Task

    • tname: 任务名称
    • spec: 定时任务格式,请参考下面的详细介绍
    • f: 执行的函数
  2. 可以测试开启运行。直接运行创建的 tk

    1. err := tk1.Run()
    2. if err != nil {
    3. t.Fatal(err)
    4. }
  3. 加入全局的计划任务列表

    1. task.AddTask("tk1", tk1)
  4. 开始执行全局的任务

    1. task.StartTask()
    2. defer task.StopTask()

查看注册的任务,或者手动调动执行,可以参考Admin 后台

spec 详解

spec 格式是参照 crontab 做的,详细的解释如下所示:

  1. // 前6个字段分别表示:
  2. // 秒钟:0-59
  3. // 分钟:0-59
  4. // 小时:1-23
  5. // 日期:1-31
  6. // 月份:1-12
  7. // 星期:0-6(0 表示周日)
  8. //还可以用一些特殊符号:
  9. // *: 表示任何时刻
  10. // ,: 表示分割,如第三段里:2,4,表示 2 点和 4 点执行
  11. //   -:表示一个段,如第三端里: 1-5,就表示 1 到 5 点
  12. // /n : 表示每个n的单位执行一次,如第三段里,*/1, 就表示每隔 1 个小时执行一次命令。也可以写成1-23/1.
  13. /////////////////////////////////////////////////////////
  14. // 0/30 * * * * * 每 30 秒 执行
  15. // 0 43 21 * * * 21:43 执行
  16. // 0 15 05 * * *    05:15 执行
  17. // 0 0 17 * * * 17:00 执行
  18. // 0 0 17 * * 1 每周一的 17:00 执行
  19. // 0 0,10 17 * * 0,2,3 每周日,周二,周三的 17:00和 17:10 执行
  20. // 0 0-10 17 1 * * 毎月1日从 17:00 到 7:10 毎隔 1 分钟 执行
  21. // 0 0 0 1,15 * 1 毎月1日和 15 日和 一日的 0:00 执行
  22. // 0 42 4 1 * *     毎月1日的 4:42 分 执行
  23. // 0 0 21 * * 1-6   周一到周六 21:00 执行
  24. // 0 0,10,20,30,40,50 * * * *  每隔 10 分 执行
  25. // 0 */10 * * * *        每隔 10 分 执行
  26. // 0 * 1 * * *         从 1:0 到 1:59 每隔 1 分钟 执行
  27. // 0 0 1 * * *         1:00 执行
  28. // 0 0 */1 * * *        毎时 0 分 每隔 1 小时 执行
  29. // 0 0 * * * *         毎时 0 分 每隔 1 小时 执行
  30. // 0 2 8-20/3 * * *       8:02,11:02,14:02,17:02,20:02 执行
  31. // 0 30 5 1,15 * *       1 日 和 15 日的 5:30 执行

一般网络上有自动的 crontab 表达式生成工具,可以直接使用。