github.com/cloudreve/Cloudreve/v3@v3.0.0-20240224133659-3edb00a6484c/pkg/crontab/init.go (about) 1 package crontab 2 3 import ( 4 model "github.com/cloudreve/Cloudreve/v3/models" 5 "github.com/cloudreve/Cloudreve/v3/pkg/util" 6 "github.com/robfig/cron/v3" 7 ) 8 9 // Cron 定时任务 10 var Cron *cron.Cron 11 12 // Reload 重新启动定时任务 13 func Reload() { 14 if Cron != nil { 15 Cron.Stop() 16 } 17 Init() 18 } 19 20 // Init 初始化定时任务 21 func Init() { 22 util.Log().Info("Initialize crontab jobs...") 23 // 读取cron日程设置 24 options := model.GetSettingByNames( 25 "cron_garbage_collect", 26 "cron_recycle_upload_session", 27 ) 28 Cron := cron.New() 29 for k, v := range options { 30 var handler func() 31 switch k { 32 case "cron_garbage_collect": 33 handler = garbageCollect 34 case "cron_recycle_upload_session": 35 handler = uploadSessionCollect 36 default: 37 util.Log().Warning("Unknown crontab job type %q, skipping...", k) 38 continue 39 } 40 41 if _, err := Cron.AddFunc(v, handler); err != nil { 42 util.Log().Warning("Failed to start crontab job %q: %s", k, err) 43 } 44 45 } 46 Cron.Start() 47 }