v1.2.1

快速開始

最後更新


本頁說明如何安裝 go-scheduler、建立排程器、註冊第一個任務並優雅關閉。

前置需求


  • Go 1.23 或以上版本
  • 非 Windows 平台:core.New 依賴 log/syslog,syslog 無法連線時改寫 stderr

安裝


使用 go get


  1. go get github.com/pardnchiu/go-scheduler@latest

套件位於 core 子目錄:
  1. import "github.com/pardnchiu/go-scheduler/core"

從原始碼


  1. git clone https://github.com/pardnchiu/go-scheduler.git
  2. cd go-scheduler
  3. go build ./...
  4. go test -race ./...

第一個任務


  1. package main
  2. import (
  3. "context"
  4. "log"
  5. "os/signal"
  6. "syscall"
  7. "github.com/pardnchiu/go-scheduler/core"
  8. )
  9. func main() {
  10. c, err := core.New(core.Config{})
  11. if err != nil {
  12. log.Fatal(err)
  13. }
  14. id, err := c.Add("@every 30s", func() {
  15. log.Println("heartbeat")
  16. }, "heartbeat")
  17. if err != nil {
  18. log.Fatal(err)
  19. }
  20. log.Println("task id:", id)
  21. c.Start()
  22. ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
  23. defer stop()
  24. <-ctx.Done()
  25. // 等待進行中任務結束
  26. <-c.Stop().Done()
  27. }

步驟呼叫結果
1core.New(core.Config{})建立排程器,時區為 time.Local
2c.Add("@every 30s", ...)註冊任務並回傳遞增 ID;@every 最小間隔 30 秒
3c.Start()計算各任務下次觸發時間並啟動事件迴圈
4c.Stop().Done()停止排程,進行中任務結束後 context 被 cancel

go-scheduler 的定位


go-scheduler 是行程內(in-process)函式庫:匯入 core、在自己的 Go 程式中註冊任務,每個 action 都在該行程的 goroutine 中執行,不需要另外部署伺服器。
專案型態說明
robfig/cron行程內 Go 函式庫Go 的 cron 函式庫
go-co-op/gocron行程內 Go 函式庫流暢 API 風格的 Go cron 排程
reugn/go-quartz行程內 Go 函式庫極簡、零依賴的排程函式庫
adhocore/gronxGo 函式庫與獨立 daemonCron 表達式解析器,並提供 task runner、job scheduler 與 daemon
madflojo/tasks行程內 Go 函式庫週期性任務的行程內排程器
ouqiang/gocron自架服務具 Web 管理介面的排程管理系統,由獨立的任務節點執行 shell 與 HTTP 任務
labulakalia/crocodile自架服務分散式任務排程系統,由調度中心透過 gRPC 呼叫 Worker 節點

在行程內函式庫這一類中,go-scheduler 把所有選項集中在一次 Add 呼叫:五欄位 Cron 表達式、描述符或 @every 間隔;以 []core.Wait 宣告前置任務,並對每個前置任務指定 Stop 或 Skip 策略;以及執行時限與逾時回呼。Stop 回傳的 context 會在無依賴的進行中任務結束後 cancel。

下一步


EN