diff --git a/agent/app/repo/cronjob.go b/agent/app/repo/cronjob.go index b56f4d336..454f93d32 100644 --- a/agent/app/repo/cronjob.go +++ b/agent/app/repo/cronjob.go @@ -32,7 +32,7 @@ type ICronjobRepo interface { StartRecords(cronjobID uint) model.JobRecords UpdateRecords(id uint, vars map[string]interface{}) error EndRecords(record model.JobRecords, status, message, records string) - AddFailedRecord(cronjobID uint) + AddFailedRecord(cronjobID uint, message string) PageRecords(page, size int, opts ...DBOption) (int64, []model.JobRecords, error) } @@ -169,12 +169,12 @@ func (u *CronjobRepo) EndRecords(record model.JobRecords, status, message, recor } _ = u.Update(record.CronjobID, map[string]interface{}{"is_executing": false}) } -func (u *CronjobRepo) AddFailedRecord(cronjobID uint) { +func (u *CronjobRepo) AddFailedRecord(cronjobID uint, message string) { var record model.JobRecords record.StartTime = time.Now() record.CronjobID = cronjobID record.Status = constant.StatusFailed - record.Message = "The current cronjob is being executed" + record.Message = message if err := global.DB.Create(&record).Error; err != nil { global.LOG.Errorf("create record status failed, err: %v", err) } diff --git a/agent/app/service/backup.go b/agent/app/service/backup.go index 694bed1ff..a08c2be4a 100644 --- a/agent/app/service/backup.go +++ b/agent/app/service/backup.go @@ -464,7 +464,7 @@ func uploadWithMap(taskItem task.Task, accountMap map[string]backupClientHelper, "file": path.Join(itemBackup.backupPath, dst), "backup": name, })) - for i := 0; i < int(retry); i++ { + for i := 0; i < int(retry)+1; i++ { _, err := itemBackup.client.Upload(src, path.Join(itemBackup.backupPath, dst)) taskItem.LogWithStatus(i18n.GetMsgByKey("Upload"), err) if err != nil { diff --git a/agent/app/service/cronjob.go b/agent/app/service/cronjob.go index 10e807615..365626e02 100644 --- a/agent/app/service/cronjob.go +++ b/agent/app/service/cronjob.go @@ -536,6 +536,9 @@ func (u *CronjobService) HandleOnce(id uint) error { if cronjob.ID == 0 { return buserr.New("ErrRecordNotFound") } + if cronjob.IsExecuting { + return buserr.New("InExecuting") + } u.HandleJob(&cronjob) return nil } diff --git a/agent/app/service/cronjob_helper.go b/agent/app/service/cronjob_helper.go index 248d61c1e..5e9b637d4 100644 --- a/agent/app/service/cronjob_helper.go +++ b/agent/app/service/cronjob_helper.go @@ -27,7 +27,7 @@ import ( func (u *CronjobService) HandleJob(cronjob *model.Cronjob) { cronjobItem, _ := cronjobRepo.Get(repo.WithByID(cronjob.ID)) if cronjobItem.IsExecuting { - cronjobRepo.AddFailedRecord(cronjob.ID) + cronjobRepo.AddFailedRecord(cronjob.ID, i18n.GetMsgByKey("InExecuting")) return } record := cronjobRepo.StartRecords(cronjob.ID) diff --git a/agent/i18n/lang/en.yaml b/agent/i18n/lang/en.yaml index 24113f9a4..0df1b2baa 100644 --- a/agent/i18n/lang/en.yaml +++ b/agent/i18n/lang/en.yaml @@ -234,6 +234,7 @@ Upload: "Upload" IgnoreBackupErr: "Backup failed, error: {{ .detail }}, ignoring this error..." IgnoreUploadErr: "Upload failed, error: {{ .detail }}, ignoring this error..." LoadBackupFailed: "Failed to get backup account connection, error: {{ .detail }}" +InExecuting: "The current task is being executed, please do not repeat the execution!" #toolbox ErrNotExistUser: 'The current user does not exist, please modify and try again!' diff --git a/agent/i18n/lang/ja.yaml b/agent/i18n/lang/ja.yaml index 59d2626eb..f9c8e864a 100644 --- a/agent/i18n/lang/ja.yaml +++ b/agent/i18n/lang/ja.yaml @@ -234,6 +234,7 @@ Upload: "アップロード" IgnoreBackupErr: "バックアップ失敗、エラー: {{ .detail }}、このエラーを無視します..." IgnoreUploadErr: "アップロード失敗、エラー: {{ .detail }}、このエラーを無視します..." LoadBackupFailed: "バックアップアカウントの接続取得に失敗、エラー: {{ .detail }}" +InExecuting: "現在のタスクは実行中です。重複して実行しないでください!" #toolbox ErrNotExistUser: '現在のユーザーは存在しません。変更してもう一度お試しください。' diff --git a/agent/i18n/lang/ko.yaml b/agent/i18n/lang/ko.yaml index 9325be163..e18d9b3d7 100644 --- a/agent/i18n/lang/ko.yaml +++ b/agent/i18n/lang/ko.yaml @@ -234,6 +234,7 @@ Upload: "업로드" IgnoreBackupErr: "백업 실패, 오류: {{ .detail }}, 이 오류를 무시합니다..." IgnoreUploadErr: "업로드 실패, 오류: {{ .detail }}, 이 오류를 무시합니다..." LoadBackupFailed: "백업 계정 연결 획득 실패, 오류: {{ .detail }}" +InExecuting: "현재 작업이 실행 중입니다. 중복 실행하지 마세요!" #도구상자 ErrNotExistUser: '현재 사용자가 존재하지 않습니다. 수정한 후 다시 시도하세요!' diff --git a/agent/i18n/lang/ms.yaml b/agent/i18n/lang/ms.yaml index 8e9438616..5653ca46c 100644 --- a/agent/i18n/lang/ms.yaml +++ b/agent/i18n/lang/ms.yaml @@ -234,6 +234,7 @@ Upload: "Muat Naik" IgnoreBackupErr: "Sandaran gagal, ralat: {{ .detail }}, abaikan ralat ini..." IgnoreUploadErr: "Muat naik gagal, ralat: {{ .detail }}, abaikan ralat ini..." LoadBackupFailed: "Gagal mendapatkan sambungan akaun sandaran, ralat: {{ .detail }}" +InExecuting: "Tugas semasa sedang dilaksanakan, jangan ulangi pelaksanaan!" #kotak alat ErrNotExistUser: 'Pengguna semasa tidak wujud, sila ubah suai dan cuba lagi!' diff --git a/agent/i18n/lang/pt-BR.yaml b/agent/i18n/lang/pt-BR.yaml index f8d4a2ae5..d1cd8c7f1 100644 --- a/agent/i18n/lang/pt-BR.yaml +++ b/agent/i18n/lang/pt-BR.yaml @@ -234,6 +234,7 @@ Upload: "Enviar" IgnoreBackupErr: "Backup falhou, erro: {{ .detail }}, ignorando este erro..." IgnoreUploadErr: "Upload falhou, erro: {{ .detail }}, ignorando este erro..." LoadBackupFailed: "Falha ao obter conexão da conta de backup, erro: {{ .detail }}" +InExecuting: "A tarefa atual está sendo executada, não repita a execução!" #caixa de ferramentas ErrNotExistUser: 'O usuário atual não existe, modifique e tente novamente!' diff --git a/agent/i18n/lang/ru.yaml b/agent/i18n/lang/ru.yaml index 66aa16213..381d3b0b8 100644 --- a/agent/i18n/lang/ru.yaml +++ b/agent/i18n/lang/ru.yaml @@ -234,6 +234,7 @@ Upload: "Загрузить" IgnoreBackupErr: "Ошибка резервного копирования: {{ .detail }}, игнорируем эту ошибку..." IgnoreUploadErr: "Ошибка загрузки: {{ .detail }}, игнорируем эту ошибку..." LoadBackupFailed: "Не удалось получить подключение к учетной записи резервной копии, ошибка: {{ .detail }}" +InExecuting: "Текущая задача выполняется, не повторяйте выполнение!" #ящик для инструментов ErrNotExistUser: 'Текущий пользователь не существует, измените его и повторите попытку!' diff --git a/agent/i18n/lang/tr.yaml b/agent/i18n/lang/tr.yaml index c03d45fb9..bb4599ae5 100644 --- a/agent/i18n/lang/tr.yaml +++ b/agent/i18n/lang/tr.yaml @@ -235,6 +235,7 @@ Upload: "Yükle" IgnoreBackupErr: "Yedekleme başarısız, hata: {{ .detail }}, bu hata yoksayılıyor..." IgnoreUploadErr: "Yükleme başarısız, hata: {{ .detail }}, bu hata yoksayılıyor..." LoadBackupFailed: "Yedek hesap bağlantısı alınamadı, hata: {{ .detail }}" +InExecuting: "Mevcut görev yürütülüyor, lütfen tekrar yürütmeyin!" #toolbox ErrNotExistUser: 'Mevcut kullanıcı mevcut değil, lütfen değiştirin ve tekrar deneyin!' diff --git a/agent/i18n/lang/zh-Hant.yaml b/agent/i18n/lang/zh-Hant.yaml index 43dfc4fa2..9985909d6 100644 --- a/agent/i18n/lang/zh-Hant.yaml +++ b/agent/i18n/lang/zh-Hant.yaml @@ -233,6 +233,7 @@ Upload: "上傳" IgnoreBackupErr: "備份失敗,錯誤:{{ .detail }},忽略本次錯誤..." IgnoreUploadErr: "上傳失敗,錯誤:{{ .detail }},忽略本次錯誤..." LoadBackupFailed: "獲取備份帳號連接失敗,錯誤:{{ .detail }}" +InExecuting: "當前任務正在執行中,請勿重複執行!" #toolbox ErrNotExistUser: '目前使用者不存在,請修改後重試!' diff --git a/agent/i18n/lang/zh.yaml b/agent/i18n/lang/zh.yaml index 6c400be17..263fd7631 100644 --- a/agent/i18n/lang/zh.yaml +++ b/agent/i18n/lang/zh.yaml @@ -233,6 +233,7 @@ Upload: "上传" IgnoreBackupErr: "备份失败,错误:{{ .detail }},忽略本次错误..." IgnoreUploadErr: "上传失败,错误:{{ .detail }},忽略本次错误..." LoadBackupFailed: "获取备份账号连接失败,错误:{{ .detail }}" +InExecuting: "当前任务正在执行中,请勿重复执行!" #toolbox ErrNotExistUser: "当前用户不存在,请修改后重试!"