package main import ( "flag" "fmt" "os" "github.com/kardianos/service" ) var ( Version = "0.0.0.1" BuildTime = "" ) type program struct { webUI *WebUI } // Start should not block. Do the actual work async. func (p *program) Start(s service.Service) error { ui, err := NewWebUI(":8080") if err != nil { return err } p.webUI = ui go func() { if err := ui.Start(); err != nil { fmt.Printf("webui stopped: %v\n", err) } }() return nil } // Stop should not block. Return with a few seconds. func (p *program) Stop(s service.Service) error { if p.webUI != nil { return p.webUI.Stop() } return nil } func main() { svcFlag := flag.String("service", "", "Control the yfkj-webui service.") flag.Parse() cfg := &service.Config{ Name: "yfkj-webui", DisplayName: "yfkj-webui", Description: "Yunfei Device Web Management UI", Option: map[string]any{ "Restart": "always", }, } svc, err := service.New(&program{}, cfg) if err != nil { fmt.Println(err) os.Exit(1) } if *svcFlag != "" { if err := service.Control(svc, *svcFlag); err != nil { fmt.Println(err) } return } if err := svc.Run(); err != nil { fmt.Println(err) os.Exit(1) } }