90 lines
2.0 KiB
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() // 启动调度器(阻塞运行)
|
|
}
|