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  }