package main import ( "dbackup/detail" log "dbackup/logging" "flag" "github.com/BurntSushi/toml" "github.com/kardianos/service" "github.com/robfig/cron" "os" "path/filepath" ) func main() { svcFlag := flag.String("service", "", "Control the system service.") flag.Parse() 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("valid actions: %q\n", service.ControlAction) log.Fatal("%s", err) } return } e = s.Run() if e != nil { lgg.Error(e) } } func addTask(t *detail.Task) { tmp, err := filepath.Abs(filepath.Dir(os.Args[0])) if err != nil { log.Fatal("can't get current work directory: %s", err) } cfg := filepath.Join(tmp, "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) } }