wood chen 7a656bbeae 重构定时任务初始化逻辑
- 将 InitCronJobs 函数重命名为 Init,并优化定时任务的执行时间,OpenRouter价格获取任务调整为每4小时执行一次。
- 简化了定时任务的注册过程,提升了代码可读性和维护性。
2025-03-26 14:35:54 +08:00

82 lines
2.2 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package cron
import (
"log"
"time"
"github.com/robfig/cron/v3"
openrouter_api "aimodels-prices/cron/openrouter-api"
siliconflow_api "aimodels-prices/cron/siliconflow-api"
)
var cronScheduler *cron.Cron
// Init 初始化并启动所有定时任务
func Init() {
log.Println("初始化定时任务...")
// 创建一个新的cron调度器使用秒级精度
cronScheduler = cron.New(cron.WithSeconds())
// 注册价格获取任务
// 每4小时执行一次
_, err := cronScheduler.AddFunc("0 */4 * * *", func() {
if err := openrouter_api.FetchAndSavePrices(); err != nil {
log.Printf("OpenRouter价格获取任务执行失败: %v", err)
}
time.Sleep(3 * time.Second)
if err := openrouter_api.UpdateOtherPrices(); err != nil {
log.Printf("其他厂商价格更新任务执行失败: %v", err)
}
time.Sleep(3 * time.Second)
if err := siliconflow_api.UpdateSiliconFlowPrices(); err != nil {
log.Printf("SiliconFlow价格更新任务执行失败: %v", err)
}
})
if err != nil {
log.Printf("注册价格更新定时任务失败: %v", err)
}
// 启动定时任务
cronScheduler.Start()
log.Println("定时任务已启动")
// 立即执行一次价格获取任务
go func() {
// 等待几秒钟,确保应用程序和数据库已完全初始化
time.Sleep(5 * time.Second)
log.Println("立即执行OpenRouter价格获取任务...")
if err := openrouter_api.FetchAndSavePrices(); err != nil {
log.Printf("初始OpenRouter价格获取任务执行失败: %v", err)
}
// 等待几秒后执行其他厂商价格更新任务
time.Sleep(3 * time.Second)
log.Println("立即执行其他厂商价格更新任务...")
if err := openrouter_api.UpdateOtherPrices(); err != nil {
log.Printf("初始其他厂商价格更新任务执行失败: %v", err)
}
// 等待几秒后执行SiliconFlow价格更新任务
time.Sleep(3 * time.Second)
log.Println("立即执行SiliconFlow价格更新任务...")
if err := siliconflow_api.UpdateSiliconFlowPrices(); err != nil {
log.Printf("初始SiliconFlow价格更新任务执行失败: %v", err)
}
}()
}
// StopCronJobs 停止所有定时任务
func StopCronJobs() {
if cronScheduler != nil {
cronScheduler.Stop()
log.Println("定时任务已停止")
}
}