package main import ( "dbackup/detail" log "dbackup/logging" "flag" "fmt" "github.com/BurntSushi/toml" "github.com/kardianos/service" "github.com/robfig/cron/v3" "os" "path/filepath" ) func main() { svcFlag := flag.String("service", "", "Control the system service.") version := flag.Bool("version", false, "print version") flag.Parse() if *version { fmt.Println("1.0.1") os.Exit(0) } detail.InitLogger() p := &detail.Task{ Ch: make(chan struct{}), Cron: cron.New(), } addTask(p) s, e := service.New(p, &service.Config{ Name: "dbackup", DisplayName: "dbackup service", Description: "cron job for database backup", }) if e != nil { log.Fatal("%s", e) } errs := make(chan error, 5) lgg, e := s.Logger(errs) if e != nil { log.Fatal("%s", e) } go func() { for { err := <-errs if err != nil { log.Fatal("%s", err) } } }() if len(*svcFlag) != 0 { err := service.Control(s, *svcFlag) if err != nil { log.Fatal("error: %v\nvalid actions: %q\n", err, service.ControlAction) } return } e = s.Run() if e != nil { lgg.Error(e) } } func addTask(t *detail.Task) { x, err := os.Executable() if err != nil { log.Fatal("can't get executable path: %v", err) } exePath := filepath.Dir(x) cfg := filepath.Join(exePath, "conf.toml") var pg detail.Postgres if _, err := toml.DecodeFile(cfg, &pg); err != nil { log.Fatal("%s", err) } if err := pg.AddTask(t); err != nil { log.Fatal("%s", err) } }