Golang定時任務簡單實現

2021-10-02 23:10:25 字數 1469 閱讀 8830

go get github.com/robfig/cron
開啟乙個定時:

根據cron表示式進行時間排程,cron可以精確到秒,大部分表示式格式也是從秒開始。

c := cron.new()預設從分開始,所以加上cron.withseconds(),保證定時按照表示式字面意思執行。

func

main()

) c.

start()

select

//阻塞主線程停止

}

停止定時:

由於goroutine沒有執行緒id,所以無法從外部停止指定的定時任務。cron自帶stop()方法,支援在方法體裡使用,來停止當前定時。

何時呼叫stop()方法,需要根據自身業務觸發,例如執行完成100次後停止,資料庫當前狀態為登出時停止,等等。

func

main()

else})

c.start()

select

//阻塞主線程停止

}

開啟多個定時:

乙個c物件可以載入多個定時任務,此時在其中乙個方法裡呼叫stop()方法,所有定時任務都會停止。

func

main()

) spec1 :=

"*/5 * * * * ?"

//cron表示式,每5秒一次

c.addfunc

(spec1,

func()

) c.

start()

select

//阻塞主線程停止

}

常見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位長度來指定表示式的。

Golang定時任務簡單實現

go get github.com robfig cron開啟乙個定時 根據cron表示式進行時間排程,cron可以精確到秒,大部分表示式格式也是從秒開始。c cron.new 預設從分開始,所以加上cron.withseconds 保證定時按照表示式字面意思執行。func main c.start...

golang的定時任務

golang的定時任務使用的是cron這個包來解決的 cron包的基礎知識 欄位名是否必須 允許的值 允許的特定字元 秒 seconds 是0 59 分 minutes 是0 59 時 hours 是0 23 日 day of month 是1 31 月 month 是1 12 星期 day of ...

Golang中的定時任務

timer 設定定時器,經過duration時間,timer會被觸發,timer被觸發之後,呼叫reset函式,重新設定定時器,再經過duration的時間,timer會被再次觸發。使用方式 ticker 設定週期定時器,每間隔duration時間,會將當前的時間傳送到chan中,讀端可以從chan...