Go實戰--golang中執行cron job定時任務(robfig/cron和jasonlvhit/gocron)

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

生命不止,繼續 go go go !!!

今天,跟大家分享的是在golang中執行定時任務,主要介紹兩個github上的開源庫的使用。

Linux下crontab

crontab 命令常見於Unix和類Unix的作業系統之中,用於設定周期性被執行的指令。 該命令從標準輸入裝置讀取指令,並將其存放於“crontab”檔案中,以供之後讀取和執行。 該詞來源於希臘語chronos(χρόνος),原意是時間。

通常,crontab儲存的指令被守護進程啟用,crond常常在後台運行,每一分鐘檢查是否有預定的作業需要執行。這類作業一般稱為cron jobs。

crontab檔案包含送交cron守護進程的一系列作業和指令。每個使用者可以擁有自己的crontab檔案;同時,作業系統儲存一個針對整個系統的crontab檔案,該檔案通常存放於/etc或者/etc之下的子目錄中,而這個檔案只能由系統管理員來修改。
crontab檔案的每一行均遵守特定的格式,由空格或tab分隔為數個領域,每個領域可以放置單一或多個數值。

命令
安裝crontab:

yum install crontabs

啟動:

service crond start

關閉:

service crond stop

重啟:

service crond restart

重載:

service crond reload

查看狀態:

service crond status

編輯任務:

crontab -e

查看任務:

crontab -l

刪除:

crontab -r

格式
分 時 日 月 星期 要啟動並執行命令

操作符號
在一個地區裡填寫多個數值的方法:
逗號(’,’)分開的值,例如:“1,3,4,7,8”
連詞符(’-‘)指定值的範圍,例如:“1-6”,意思等同於“1,2,3,4,5,6”
星號(’*’)代表任何可能的值。例如,在“小時域”裡的星號等於是“每一個小時”,等等
某些cron程式的擴充版本也支援斜線(’/’)操作符,用於表示跳過某些給定的數。例如,“*/3”在小時域中等於“0,3,6,9,12,15,18,21”等被3整除的數;

執行個體
每分鐘執行一次命令:

* * * * * yourCommand

每小時的第2和第10分鐘執行:

2,10 * * * * yourCommand

每天上午9點到12點的第2和第10分鐘執行:

2,10 9-12 * * * yourCommand

每隔兩天的上午9點到12點的第2和第10分鐘執行:

2,10 9-12 */2 * * yourCommand

每周一上午9點到12點的第2和第10分鐘執行:

2,10 9-12 * * 1 yourCommand

robfig/cron

安裝:

go get -u github.com/robfig/cron

應用:
每分鐘執行一次:

package mainimport (    "log"    "github.com/robfig/cron")func main() {    i := 0    c := cron.New()    spec := "0 */1 * * * *"    c.AddFunc(spec, func() {        i++        log.Println("execute per second", i)    })    c.Start()    select {}}

其中注意select的用法:
golang 的 select 的功能和 select, poll, epoll 相似, 就是監聽 IO 操作,當 IO 操作發生時,觸發相應的動作。

每天上午9點到12點的第2和第10分鐘執行:

package mainimport (    "fmt"    "github.com/robfig/cron")func main() {    spec := "2,10 9-12 * * *" // 每天上午9點到12點的第2和第10分鐘執行    c := cron.New()    c.AddFunc(spec, myFunc)    c.Start()    select {}}func myFunc() {    fmt.Println("execute")}

jasonlvhit/gocron

安裝:

go get -u github.com/jasonlvhit/gocron

每隔1秒執行一個任務,每隔4秒執行另一個任務:

package mainimport (    "fmt"    "time"    "github.com/jasonlvhit/gocron")func task() {    fmt.Println("I am runnning task.", time.Now())}func superWang() {    fmt.Println("I am runnning superWang.", time.Now())}func main() {    s := gocron.NewScheduler()    s.Every(1).Seconds().Do(task)    s.Every(4).Seconds().Do(superWang)    sc := s.Start() // keep the channel    go test(s, sc)  // wait    <-sc            // it will happens if the channel is closed}func test(s *gocron.Scheduler, sc chan bool) {    time.Sleep(8 * time.Second)    s.Remove(task) //remove task    time.Sleep(8 * time.Second)    s.Clear()    fmt.Println("All task removed")    close(sc) // close the channel}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.