Files
backup/main.go
2026-02-03 14:47:04 +08:00

69 lines
1.6 KiB
Go

package main
import (
"flag"
"log"
"os"
"os/signal"
"syscall"
"git.nyne.dev/x/backup/config"
"git.nyne.dev/x/backup/scheduler"
"git.nyne.dev/x/backup/storage"
)
func main() {
configPath := flag.String("config", "/config/backup.yaml", "Path to configuration file")
flag.Parse()
// Load configuration
log.Printf("Loading configuration from %s...\n", *configPath)
cfg, err := config.LoadConfig(*configPath)
if err != nil {
log.Fatalf("Failed to load config: %v\n", err)
}
log.Printf("Configuration loaded: %s\n", cfg.Name)
// Test backup items
log.Println("Testing backup items...")
if err := cfg.TestItems(); err != nil {
log.Fatalf("Backup item test failed: %v\n", err)
}
log.Println("✓ All backup items are accessible")
// Test S3 storage
log.Println("Testing S3 storage...")
s3Storage, err := storage.NewS3Storage(cfg.Options.S3)
if err != nil {
log.Fatalf("Failed to create S3 storage: %v\n", err)
}
if err := s3Storage.Test(); err != nil {
log.Fatalf("S3 storage test failed: %v\n", err)
}
log.Println("✓ S3 storage is accessible")
log.Println("All configuration tests passed!")
// Create and start scheduler
sched, err := scheduler.NewScheduler(cfg)
if err != nil {
log.Fatalf("Failed to create scheduler: %v\n", err)
}
if err := sched.Start(); err != nil {
log.Fatalf("Failed to start scheduler: %v\n", err)
}
// Wait for interrupt signal
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
log.Println("Backup service is running. Press Ctrl+C to stop.")
<-sigChan
log.Println("Shutting down...")
sched.Stop()
log.Println("Shutdown complete")
}