39 lines
922 B
Go
39 lines
922 B
Go
package backup
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/spf13/cobra"
|
|
"git.misaka.ren/M1saka/docker_backup/internal/config"
|
|
"git.misaka.ren/M1saka/docker_backup/internal/scheduler"
|
|
)
|
|
|
|
var daemonCmd = &cobra.Command{
|
|
Use: "daemon",
|
|
Short: "Run as a background daemon with cron scheduling",
|
|
Long: `Start the backup daemon that runs scheduled backups according to each project's cron expression.`,
|
|
RunE: runDaemon,
|
|
}
|
|
|
|
func init() {
|
|
rootCmd.AddCommand(daemonCmd)
|
|
}
|
|
|
|
func runDaemon(cmd *cobra.Command, args []string) error {
|
|
cfg, err := config.Load(cfgFile)
|
|
if err != nil {
|
|
return fmt.Errorf("load config: %w", err)
|
|
}
|
|
|
|
if !cfg.HasCron() {
|
|
return fmt.Errorf("no projects have cron expressions configured - cannot start daemon")
|
|
}
|
|
|
|
sched, err := scheduler.New(cfg, dryRun)
|
|
if err != nil {
|
|
return fmt.Errorf("create scheduler: %w", err)
|
|
}
|
|
|
|
fmt.Println("Starting backup daemon...")
|
|
return sched.Run(cmd.Context())
|
|
} |