From ba25a815a43edddd09569a24d00709cd8576ae22 Mon Sep 17 00:00:00 2001 From: unclesam <2036253946@qq.com> Date: Wed, 8 Jul 2026 08:28:41 +0800 Subject: [PATCH] =?UTF-8?q?feat(cron):=20=E6=B7=BB=E5=8A=A0=E5=AE=9A?= =?UTF-8?q?=E6=97=B6=E4=BB=BB=E5=8A=A1=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cmd/server/server.go | 5 +++++ go.mod | 1 + go.sum | 2 ++ internal/cron/cron.go | 32 ++++++++++++++++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 internal/cron/cron.go diff --git a/cmd/server/server.go b/cmd/server/server.go index dfc2801..06b44a9 100644 --- a/cmd/server/server.go +++ b/cmd/server/server.go @@ -1,6 +1,7 @@ package main import ( + "EnGin/internal/cron" "EnGin/internal/db" "EnGin/internal/global" "EnGin/internal/server" @@ -33,6 +34,10 @@ var serverCmd = &cobra.Command{ global.Log.Fatal("初始化 Casbin 失败", zap.Error(err)) } + // 初始化定时任务 + cron.InitCron() + defer cron.Stop() + // 启动 Gin 服务 server.Run() }, diff --git a/go.mod b/go.mod index 15ae217..058611a 100644 --- a/go.mod +++ b/go.mod @@ -61,6 +61,7 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/quic-go/qpack v0.6.0 // indirect github.com/quic-go/quic-go v0.59.0 // indirect + github.com/robfig/cron/v3 v3.0.1 // indirect github.com/sagikazarmark/locafero v0.11.0 // indirect github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect github.com/spf13/afero v1.15.0 // indirect diff --git a/go.sum b/go.sum index cb3fb4d..49bfa75 100644 --- a/go.sum +++ b/go.sum @@ -146,6 +146,8 @@ github.com/quic-go/quic-go v0.59.0 h1:OLJkp1Mlm/aS7dpKgTc6cnpynnD2Xg7C1pwL6vy/SA github.com/quic-go/quic-go v0.59.0/go.mod h1:upnsH4Ju1YkqpLXC305eW3yDZ4NfnNbmQRCMWS58IKU= github.com/redis/go-redis/v9 v9.21.0 h1:FPBE4hhbAke+TLmcY3WkpbDffJEomdqPn3HYiqAtL9E= github.com/redis/go-redis/v9 v9.21.0/go.mod h1:v/M13XI1PVCDcm01VtPFOADfZtHf8YW3baQf57KlIkA= +github.com/robfig/cron/v3 v3.0.1 h1:WdRxkvbJztn8LMz/QEvLN5sBU+xKpSqwwUO1Pjr4qDs= +github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= diff --git a/internal/cron/cron.go b/internal/cron/cron.go new file mode 100644 index 0000000..61cd92b --- /dev/null +++ b/internal/cron/cron.go @@ -0,0 +1,32 @@ +package cron + +import ( + "EnGin/internal/global" + "time" + + "github.com/robfig/cron/v3" +) + +// Cron 实例全局持有,方便后续管理(比如优雅退出时关闭) + +var Crontab *cron.Cron + +func InitCron() { + timezone, _ := time.LoadLocation("Asia/Shanghai") + Crontab = cron.New(cron.WithSeconds(), cron.WithLocation(timezone)) + + // 在这里注册您的定时任务 + // Crontab.AddFunc("*/5 * * * * *", func() { + // global.Log.Info("定时任务执行中...") + // }) + + Crontab.Start() + global.Log.Info("后台定时任务启动成功") +} + +func Stop() { + if Crontab != nil { + Crontab.Stop() + global.Log.Info("后台定时任务已安全停止") + } +}