diff --git a/modules/cron/setting.go b/modules/cron/setting.go
index dd93d0398..5fe9ca6e1 100644
--- a/modules/cron/setting.go
+++ b/modules/cron/setting.go
@@ -17,13 +17,15 @@ type Config interface {
 	DoRunAtStart() bool
 	GetSchedule() string
 	FormatMessage(name, status string, doer *models.User, args ...interface{}) string
+	DoNoticeOnSuccess() bool
 }
 
 // BaseConfig represents the basic config for a Cron task
 type BaseConfig struct {
-	Enabled    bool
-	RunAtStart bool
-	Schedule   string
+	Enabled         bool
+	RunAtStart      bool
+	Schedule        string
+	NoSuccessNotice bool
 }
 
 // OlderThanConfig represents a cron task with OlderThan setting
@@ -53,6 +55,11 @@ func (b *BaseConfig) DoRunAtStart() bool {
 	return b.RunAtStart
 }
 
+// DoNoticeOnSuccess returns whether a success notice should be posted
+func (b *BaseConfig) DoNoticeOnSuccess() bool {
+	return !b.NoSuccessNotice
+}
+
 // FormatMessage returns a message for the task
 func (b *BaseConfig) FormatMessage(name, status string, doer *models.User, args ...interface{}) string {
 	realArgs := make([]interface{}, 0, len(args)+2)
diff --git a/modules/cron/tasks.go b/modules/cron/tasks.go
index a97326bd0..6f3a96fd3 100644
--- a/modules/cron/tasks.go
+++ b/modules/cron/tasks.go
@@ -98,8 +98,10 @@ func (t *Task) RunWithUser(doer *models.User, config Config) {
 			}
 			return
 		}
-		if err := models.CreateNotice(models.NoticeTask, config.FormatMessage(t.Name, "finished", doer)); err != nil {
-			log.Error("CreateNotice: %v", err)
+		if config.DoNoticeOnSuccess() {
+			if err := models.CreateNotice(models.NoticeTask, config.FormatMessage(t.Name, "finished", doer)); err != nil {
+				log.Error("CreateNotice: %v", err)
+			}
 		}
 	})
 }
diff --git a/modules/cron/tasks_basic.go b/modules/cron/tasks_basic.go
index 438c4a500..4da21fc7d 100644
--- a/modules/cron/tasks_basic.go
+++ b/modules/cron/tasks_basic.go
@@ -16,9 +16,10 @@ import (
 
 func registerUpdateMirrorTask() {
 	RegisterTaskFatal("update_mirrors", &BaseConfig{
-		Enabled:    true,
-		RunAtStart: false,
-		Schedule:   "@every 10m",
+		Enabled:         true,
+		RunAtStart:      false,
+		Schedule:        "@every 10m",
+		NoSuccessNotice: true,
 	}, func(ctx context.Context, _ *models.User, _ Config) error {
 		return mirror_service.Update(ctx)
 	})