|
|
|
package crontab
|
|
|
|
|
|
|
|
import (
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"strings"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
model "github.com/cloudreve/Cloudreve/v3/models"
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/cache"
|
|
|
|
"github.com/cloudreve/Cloudreve/v3/pkg/util"
|
|
|
|
)
|
|
|
|
|
|
|
|
func garbageCollect() {
|
|
|
|
// 清理打包下载产生的临时文件
|
|
|
|
collectArchiveFile()
|
|
|
|
|
|
|
|
// 清理过期的内置内存缓存
|
|
|
|
if store, ok := cache.Store.(*cache.MemoStore); ok {
|
|
|
|
collectCache(store)
|
|
|
|
}
|
|
|
|
|
|
|
|
util.Log().Info("定时任务 [cron_garbage_collect] 执行完毕")
|
|
|
|
}
|
|
|
|
|
|
|
|
func collectArchiveFile() {
|
|
|
|
// 读取有效期、目录设置
|
|
|
|
tempPath := util.RelativePath(model.GetSettingByName("temp_path"))
|
|
|
|
expires := model.GetIntSetting("download_timeout", 30)
|
|
|
|
|
|
|
|
// 列出文件
|
|
|
|
root := filepath.Join(tempPath, "archive")
|
|
|
|
err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error {
|
|
|
|
if err == nil && !info.IsDir() &&
|
|
|
|
strings.HasPrefix(filepath.Base(path), "archive_") &&
|
|
|
|
time.Now().Sub(info.ModTime()).Seconds() > float64(expires) {
|
|
|
|
util.Log().Debug("删除过期打包下载临时文件 [%s]", path)
|
|
|
|
// 删除符合条件的文件
|
|
|
|
if err := os.Remove(path); err != nil {
|
|
|
|
util.Log().Debug("临时文件 [%s] 删除失败 , %s", path, err)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
})
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
util.Log().Debug("[定时任务] 无法列取临时打包目录")
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
func collectCache(store *cache.MemoStore) {
|
|
|
|
util.Log().Debug("清理内存缓存")
|
|
|
|
store.GarbageCollect()
|
|
|
|
}
|