From be2c30c9e0d770b0f70229b5e6fb86ca2dd6e992 Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Thu, 12 Jun 2025 22:46:41 +0800 Subject: [PATCH] fix: Fix the problem of abnormal reserved copies for cronjob (#9044) Refs #9042 --- agent/app/service/cronjob_helper.go | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/agent/app/service/cronjob_helper.go b/agent/app/service/cronjob_helper.go index b077bec16..913faa190 100644 --- a/agent/app/service/cronjob_helper.go +++ b/agent/app/service/cronjob_helper.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "os" + "path" pathUtils "path" "strings" "time" @@ -78,17 +79,21 @@ func (u *CronjobService) loadTask(cronjob *model.Cronjob, record *model.JobRecor return fmt.Errorf("the script content is empty and is skipped") } u.handleShell(*cronjob, taskItem) + u.removeExpiredLog(*cronjob) case "curl": if len(cronjob.URL) == 0 { return fmt.Errorf("the url is empty and is skipped") } u.handleCurl(*cronjob, taskItem) + u.removeExpiredLog(*cronjob) case "ntp": u.handleNtpSync(*cronjob, taskItem) + u.removeExpiredLog(*cronjob) case "cutWebsiteLog": err = u.handleCutWebsiteLog(cronjob, record.StartTime, taskItem) case "clean": u.handleSystemClean(*cronjob, taskItem) + u.removeExpiredLog(*cronjob) case "website": err = u.handleWebsite(*cronjob, record.StartTime, taskItem) case "app": @@ -306,6 +311,24 @@ func (u *CronjobService) removeExpiredBackup(cronjob model.Cronjob, accountMap m } } +func (u *CronjobService) removeExpiredLog(cronjob model.Cronjob) { + records, _ := cronjobRepo.ListRecord(cronjobRepo.WithByJobID(int(cronjob.ID)), repo.WithOrderBy("created_at desc")) + if len(records) <= int(cronjob.RetainCopies) { + return + } + for i := int(cronjob.RetainCopies); i < len(records); i++ { + if len(records[i].File) != 0 { + files := strings.Split(records[i].File, ",") + for _, file := range files { + _ = os.Remove(file) + } + } + _ = cronjobRepo.DeleteRecord(repo.WithByID(uint(records[i].ID))) + _ = taskRepo.Delete(taskRepo.WithByID(records[i].TaskID)) + _ = os.Remove(path.Join(global.CONF.Base.InstallDir, "1panel/log/task/Cronjob", records[i].TaskID+".log")) + } +} + func hasBackup(cronjobType string) bool { return cronjobType == "app" || cronjobType == "database" || cronjobType == "website" || cronjobType == "directory" || cronjobType == "snapshot" || cronjobType == "log" || cronjobType == "cutWebsiteLog" }