golang cronタイミングタスク使用

2992 ワード

1、cron式の基本フォーマット
   linux      cron     。linux       crontab -e        。  ,linux    cron        。          Go     cron       ,           ,cron             。(      Java    Quartz,  cron          ,              Go   cron   ,      )

cron(    ),    ,       ,          (job)。cron            。

cron             ,   6           。

フィールド名
必要かどうか
許容値
許可される特定の文字
秒(Seconds)
はい
0-59
*/, -
分(Minutes)
はい
0-59
*/, -
時(Hours)
はい
0-23
*/, -
日(Day of month)
はい
1-31
*/, – ?
月(Month)
はい
1-12 or JAN-DEC
*/, -
週(Day of week)
いいえ
0-6 or SUM-SAT
*/, – ?
 :
1) (Month)   (Day of week)          , :SUN、Sun   sun     。
2)   (Day of week)       ,     *

2、特殊文字の説明
1)  (*)
   cron              。   5       (month),     

2)  (/)
      ,  1   (minutes)    3-59/15,       3        ,     15       (  3、18、33、48        ),        :3/15

3)  (,)
     ,  6      MON,WED,FRI,      、 、    

4)   (-)
      ,  3       9-17    9am   5pm       (  9 17)

5)  (?)
    (Day of month)   (Day of week),\      ,       *

3、例
  • 最も簡単なcrontabタスク
  • package main
    
    import (
        "github.com/robfig/cron"
        "log"
    )
    
    func main() {
        i := 0
        c := cron.New()
        spec := "*/5 * * * * ?"
        c.AddFunc(spec, func() {
            i++
            log.Println("cron running:", i)
        })
        c.Start()
        
        select{}
    }
    
           :
    
    2017/07/06 18:28:30 cron running: 1
    2017/07/06 18:28:35 cron running: 2
    2017/07/06 18:28:40 cron running: 3
    2017/07/06 18:28:45 cron running: 4
    2017/07/06 18:28:50 cron running: 5
    ...
    
  • 複数のタイミングcrontabタスク
  • package main
    
    import (
        "github.com/robfig/cron"
        "log"
        "fmt"
    )
    
    type TestJob struct {
    }
    
    func (this TestJob)Run() {
        fmt.Println("testJob1...")
    }
    
    type Test2Job struct {
    }
    
    func (this Test2Job)Run() {
        fmt.Println("testJob2...")
    }
    
    //      
    func main() {
        i := 0
        c := cron.New()
        
        //AddFunc
        spec := "*/5 * * * * ?"
        c.AddFunc(spec, func() {
            i++
            log.Println("cron running:", i)
        })
        
        //AddJob  
        c.AddJob(spec, TestJob{})
        c.AddJob(spec, Test2Job{})
        
        //      
        c.Start()
        
        //       ,                .
        defer c.Stop()
        
        select{}
    }
    
    go run crontab/crontab-2.go 
           :
    testJob1...
    2017/07/07 18:46:40 cron running: 1
    testJob2...
    2017/07/07 18:46:45 cron running: 2
    testJob1...
    testJob2...
    2017/07/07 18:46:50 cron running: 3
    testJob1...
    testJob2...
    2017/07/07 18:46:55 cron running: 4
    testJob1...
    testJob2...
    testJob2...
    testJob1...
    2017/07/07 18:47:00 cron running: 5
    ...
    
  • toml yaml構成と組み合わせてタイミング実行が必要なタスク
  • ...
    
      
    http://ju.outofmemory.cn/entry/65356