package main import ( "apiServer_service/crontab" "apiServer_service/crontab/tasks" db "apiServer_service/models/database" "apiServer_service/utils/logger" "fmt" "os" "os/signal" "syscall" "github.com/joho/godotenv" ) func init() { if err := godotenv.Load(".env"); err != nil { fmt.Println("Warning: .env file not found, using system environment variables") } } func main() { if os.Getenv("DB_TYPE") != "" { db.ConnectDatabase() } scheduler := crontab.DefaultScheduler() tasks.RegisterTasks(scheduler) if len(os.Args) > 1 { switch os.Args[1] { case "run-once": logger.CronInfo("Scheduler", "立即执行所有任务") scheduler.RunOnce() return case "run": if len(os.Args) > 2 { name := os.Args[2] if scheduler.RunTaskByName(name) { logger.CronInfo("Scheduler", fmt.Sprintf("任务执行完成: %s", name)) } else { logger.CronError("Scheduler", fmt.Sprintf("未找到任务: %s", name)) } return } logger.CronError("Scheduler", "用法: scheduler run <任务名>") return case "list": fmt.Println("已注册任务:") for _, task := range scheduler.GetTasks() { fmt.Printf(" - %-20s %s\n", task.Name(), task.Spec()) } return default: fmt.Printf("未知命令: %s\n", os.Args[1]) printUsage() return } } scheduler.Start() logger.CronInfo("Scheduler", "调度器已启动") quit := make(chan os.Signal, 1) signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM) <-quit logger.CronInfo("Scheduler", "正在停止...") scheduler.Stop() logger.CronInfo("Scheduler", "已停止") } func printUsage() { fmt.Println("用法:") fmt.Println(" scheduler 启动调度器(后台常驻)") fmt.Println(" scheduler list 列出所有已注册任务") fmt.Println(" scheduler run-once 立即执行所有任务一次") fmt.Println(" scheduler run <名> 立即执行指定任务一次") }