diff --git a/README.md b/README.md index caddd6b..f8ddc02 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,12 @@ Check out [crontab.dev](https://crontab.dev/) for a nice explanation of the sche Default: `0 */6 * * *` (every 6 hours) +### `BACKUP_NO_CRON` + +If provided, runs the backup only once without a cron schedule. This is useful for one-off backups of testing if the configuration works. + +Default: `false` + ### `BACKUP_MAX` How many backups to keep. If more backups are stored in the backup folder, the oldest one will be removed until there diff --git a/main.go b/main.go index 3953963..e63ad19 100644 --- a/main.go +++ b/main.go @@ -3,39 +3,49 @@ package main import ( "github.com/robfig/cron/v3" "log" + "os" ) -func main() { +func runBackup() { c, err := getClient() if err != nil { log.Fatalf("Could not create client: %s", err) } + updateFullBackupPath() + + containers, err := getContainers(c) + if err != nil { + log.Fatalf("Could not get containers: %s", err) + } + + storeContainers(c, containers) + + err = cleanupOldBackups() + if err != nil { + log.Fatalf("Could not clean old backups: %s", err) + } + + dumpAllDatabases(c) + + err = callWebhook() + if err != nil { + log.Fatalf("Could not call completion webhook: %s", err) + } + + log.Println("Done.") +} + +func main() { + noCron, has := os.LookupEnv("BACKUP_NO_CRON") + if has && (noCron == "true" || noCron == "1") { + log.Println("BACKUP_NO_CRON set, running backup once, then exiting") + runBackup() + return + } + cr := cron.New() - _, err = cr.AddFunc(config.Schedule, func() { - updateFullBackupPath() - - containers, err := getContainers(c) - if err != nil { - log.Fatalf("Could not get containers: %s", err) - } - - storeContainers(c, containers) - - err = cleanupOldBackups() - if err != nil { - log.Fatalf("Could not clean old backups: %s", err) - } - - dumpAllDatabases(c) - - err = callWebhook() - if err != nil { - log.Fatalf("Could not call completion webhook: %s", err) - } - - log.Println("Done.") - }) + _, err := cr.AddFunc(config.Schedule, runBackup) if err != nil { log.Fatalf("Could not create cron job: %s\n", err) }