diff --git a/internal/controller/meta.go b/internal/controller/meta.go index a19e6f6..45468ae 100644 --- a/internal/controller/meta.go +++ b/internal/controller/meta.go @@ -136,13 +136,19 @@ func (m *meta) Start(ctx context.Context) { // 清理一天前的文件 go func() { ticker := time.NewTicker(5 * time.Minute) + duration := time.Duration(opt.Cfg.CleanInterval) * time.Hour for { select { case <-ctx.Done(): return case now := <-ticker.C: + //log.Debug("meta.Clean: 开始清理过期文件 = %v", duration) _ = filepath.Walk(opt.Cfg.DataPath, func(path string, info os.FileInfo, err error) error { + if info == nil { + return nil + } + if info.IsDir() { return nil } @@ -168,12 +174,16 @@ func (m *meta) Start(ctx context.Context) { code := strings.TrimPrefix(name, ".meta.") - if now.Sub(time.UnixMilli(mi.CreatedAt)) > 24*time.Hour { + if now.Sub(time.UnixMilli(mi.CreatedAt)) > duration { log.Debug("controller.meta: file out of date, code = %s, user_key = %s", code, mi.Uploader) - os.RemoveAll(opt.FilePath(code)) - os.RemoveAll(path) + if err = os.RemoveAll(opt.FilePath(code)); err != nil { + log.Warn("meta.Clean: remove file failed, file = %s, err = %s", opt.FilePath(code), err.Error()) + } + if err = os.RemoveAll(path); err != nil { + log.Warn("meta.Clean: remove file failed, file = %s, err = %s", path, err.Error()) + } m.Lock() delete(m.m, code) diff --git a/internal/opt/opt.go b/internal/opt/opt.go index 35049f4..5da258d 100644 --- a/internal/opt/opt.go +++ b/internal/opt/opt.go @@ -7,10 +7,11 @@ import ( ) type config struct { - Debug bool - Address string - DataPath string - Auth string + Debug bool + Address string + DataPath string + Auth string + CleanInterval int } var ( diff --git a/main.go b/main.go index 47c8044..d8c5179 100644 --- a/main.go +++ b/main.go @@ -7,6 +7,7 @@ import ( "github.com/loveuer/ushare/internal/api" "github.com/loveuer/ushare/internal/controller" "github.com/loveuer/ushare/internal/opt" + "github.com/loveuer/ushare/internal/pkg/tool" "os/signal" "syscall" ) @@ -16,11 +17,12 @@ func init() { flag.StringVar(&opt.Cfg.Address, "address", "0.0.0.0:9119", "") flag.StringVar(&opt.Cfg.DataPath, "data", "/data", "") flag.StringVar(&opt.Cfg.Auth, "auth", "", "auth required(admin, password)") + flag.IntVar(&opt.Cfg.CleanInterval, "clean", 24, "清理文件的周期, 单位: 小时, 0 则表示不自动清理") flag.Parse() if opt.Cfg.Debug { log.SetLogLevel(log.LogLevelDebug) - log.Debug("start server with debug mode") + tool.TablePrinter(opt.Cfg) } }