package cmd import ( "context" "epic/internal/controller/cron" "epic/internal/controller/hero" "epic/internal/service" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcmd" "os" "os/signal" "syscall" ) func CORS(r *ghttp.Request) { r.Response.CORSDefault() r.Middleware.Next() } var ( Main = gcmd.Command{ Name: "main", Usage: "main", Brief: "start http server", Func: func(ctx context.Context, parser *gcmd.Parser) (err error) { // 启动定时任务 if err := service.Cron().StartAllJobs(ctx); err != nil { g.Log().Error(ctx, "Failed to start cron jobs:", err) return err } // 设置优雅关闭 setupGracefulShutdown(ctx) s := g.Server() s.Use(CORS) s.Group("/", func(group *ghttp.RouterGroup) { group.Middleware(ghttp.MiddlewareHandlerResponse) group.Bind( hero.NewV1(), cron.NewV1(), ) }) s.Run() return nil }, } ) // setupGracefulShutdown 设置优雅关闭 func setupGracefulShutdown(ctx context.Context) { // 创建信号通道 sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM) // 在后台监听信号 go func() { sig := <-sigChan g.Log().Infof(ctx, "Received signal: %v, shutting down gracefully...", sig) // 停止定时任务 if err := service.Cron().StopAllJobs(ctx); err != nil { g.Log().Error(ctx, "Failed to stop cron jobs:", err) } // 退出程序 os.Exit(0) }() }