Crontab だと管理しにくいので、
Cron 処理をプロジェクト内だけで完結させる。
Github に色々あった中で、
今回は robfig/cron を使用する。
サンプルコード
go.mod
module github.com/psychedelicnekopunch/go-sample
go 1.14
require (
github.com/robfig/cron/v3 v3.0.1
)
cron.go
package main
import (
"fmt"
"net/http"
"github.com/robfig/cron/v3"
)
func main() {
// Cron と API を想定したルーティングを一緒に書く
// Cron
// サンプルでは n 秒毎で実装しているけど、
// 実際に crontab で使用する "30 2 * * *" のような記述もできる。
c := cron.New()
// 例その1
// 2秒毎に呼び出す
c.AddFunc("@every 2s", func() {
call()
})
// 例その2
// 3秒毎に呼び出す
c.AddFunc("@every 3s", call2)
c.Start()
// API を想定したルーティング
http.HandleFunc("/", func(res http.ResponseWriter, req *http.Request) {})
// ここではポート番号 8080 で起動。適当に番号を当てていい
if err := http.ListenAndServe(":8080", nil); err != nil {
fmt.Printf(err.Error())
}
}
func call() {
fmt.Printf("call\n")
}
func call2() {
fmt.Printf("call2\n")
}
起動
ctl + c で終了。
$ go run cron.go
call
call2
call
call2
call
call
call2
call