daShangDao_planA/planC/main.go

90 lines
2.0 KiB
Go

package main
import (
"context"
"fmt"
"planA/initialization/config"
planACron "planA/initialization/cron"
"planA/initialization/golabl"
"planA/initialization/mysql"
"planA/initialization/redis"
"planA/initialization/sqLite"
"sync"
"github.com/robfig/cron/v3"
)
var (
backupMutex sync.Mutex
)
func Init() error {
//初始化上下文
golabl.Ctx = context.Background()
// 初始化配置
configErr := config.Init("")
if configErr != nil {
return fmt.Errorf("初始化配置失败: %v", configErr)
}
// 初始化 mysql
mysqlErr := mysql.Init()
if mysqlErr != nil {
return fmt.Errorf("初始化mysql失败: %v", mysqlErr)
}
// 初始化 redis
redisErr := redis.Init()
if redisErr != nil {
return fmt.Errorf("初始化redis失败: %v", redisErr)
}
// 初始化 sqlite
sqliteErr := sqLite.Init()
if sqliteErr != nil {
return fmt.Errorf("初始化sqlite失败: %v", sqliteErr)
}
return nil
}
func main() {
// 初始化
err := Init()
if err != nil {
fmt.Println("初始化失败:", err)
return
}
fmt.Println("定时任务 启动成功")
c := cron.New(cron.WithSeconds()) // 支持秒级别的精度
// 备份 body_backup到硬盘 - 每分钟执行一次,使用锁防止并发
_, backupBodyBackupErr := c.AddFunc("0 * * * * ?", func() {
// 尝试获取锁,如果锁已被占用则直接返回
if !backupMutex.TryLock() {
fmt.Println("上一次备份任务尚未完成,跳过本次执行")
return
}
defer backupMutex.Unlock()
fmt.Println("开始备份 body_backup到硬盘")
planACron.BackupBodyBackup()
fmt.Println("备份 body_backup到硬盘完成")
})
if backupBodyBackupErr != nil {
fmt.Println("定时任务 备份 body_backup到硬盘 启动失败")
return
}
// 每天上午9点压缩昨天csv文件
_, zipBackupFileErr := c.AddFunc("0 0 9 * * ?", func() {
fmt.Println("开始压缩昨天 csv文件")
planACron.ZipBackupFile()
})
if zipBackupFileErr != nil {
fmt.Println("定时任务 zipBackupFile 启动失败")
return
}
c.Run() // 启动调度器(阻塞运行)
}