golang crontab的计划任务及定时任务使用

对了,最近又开始搞golang了…  记得以前在乐视的时候用golang做过些东西,后来因为种种问题不得不放弃golang。  有个功能是需要定期的执行任务,因为是跟项目内部耦合一起的,所以不适合用linux crontab来操作。  在github中找到一个热门的golang cron模块,使用很简单! 我们只需要把一堆的任务注册给调度器就可以了。 

该文章写的有些乱,欢迎来喷 ! 另外文章后续不断更新中,请到原文地址查看更新。

http://xiaorui.cc/2016/03/03/golang-crontab%E7%9A%84%E8%AE%A1%E5%88%92%E4%BB%BB%E5%8A%A1%E5%8F%8A%E5%AE%9A%E6%97%B6%E4%BB%BB%E5%8A%A1%E4%BD%BF%E7%94%A8/

golang crontab的项目地址:
https://github.com/robfig/cron

具体文档:
https://github.com/robfig/cron/blob/master/doc.go

下面是go cron文档,我自己简略翻译成中文了。  

# xiaorui.cc

注册任务到调度器里,当任务要执行的时候会使用goroutines调用,这样每个任务都不会发生阻塞。 

Golang不仅仅是兼容了linux标准的crontab格式,而且扩展了秒。也就是说正常的crontab是 分 时 小时 月 星期,而robfig cron是 秒 分 时 日 月 星期。 

c := cron.New()
c.AddFunc("0 30 * * * *", func() { fmt.Println("Every hour on the half hour") })
c.AddFunc("@hourly",      func() { fmt.Println("Every hour") })
c.AddFunc("@every 1h30m", func() { fmt.Println("Every hour thirty") })
c.Start()


//这些任务都是异步执行的.

c.AddFunc("@daily", func() { fmt.Println("Every day") })


//获取他下次执行的时间. 
inspect(c.Entries())

//关闭着计划任务, 但是不能关闭已经在执行中的任务. 
c.Stop()  

CRON Expression Format

A cron expression represents a set of times, using 6 space-separated fields.
Field name   | Mandatory? | Allowed values  | Allowed special characters
----------   | ---------- | --------------  | --------------------------
Seconds      | Yes        | 0-59            | * / , -
Minutes      | Yes        | 0-59            | * / , -
Hours        | Yes        | 0-23            | * / , -
Day of month | Yes        | 1-31            | * / , - ?
Month        | Yes        | 1-12 or JAN-DEC | * / , -
Day of week  | Yes        | 0-6 or SUN-SAT  | * / , - ?

下面是robfig/cron的实例用法。 

package main
//blog: xiaorui.cc
import (
    "github.com/robfig/cron"
    "log"
)

func main() {
    i := 0
    c := cron.New()
    spec := "0 */1 * * * *"
    c.AddFunc(spec, func() {
        i++
        log.Println("start", i)
    })
    c.Start()
    select{} //阻塞主线程不退出

}

下面就是robfig/cron的执行的效果,结果跟咱们设定的一样每分钟一次调用一次。

#xiaorui.cc

[ruifengyun@devops test ]$ go run cron.go
2016/03/03 13:48:00 start 1
2016/03/03 13:49:00 start 2
2016/03/03 13:50:00 start 3
2016/03/03 13:51:00 start 4
2016/03/03 13:52:00 start 5
2016/03/03 13:53:00 start 6
2016/03/03 13:54:00 start 7


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

电子邮件地址不会被公开。 必填项已用*标注