package main import ( "flag" "fmt" "os" "rtu_linux_services/servicelib" "github.com/kardianos/service" "hnyfkj.com.cn/rtu/linux/baseapp" ) var ( Version = "0.0.0.1" BuildTime = "" ) type program struct { name string webUI *WebUI } // Start should not block. Do the actual work async. func (p *program) Start(s service.Service) error { logCfgFile, err := servicelib.EnsureDefaultLogConfig() if err != nil { return err } baseapp.InitLogger(logCfgFile) baseapp.Logger.Infof("App Version: %s, Build Time: %s", Version, BuildTime) ui, err := NewWebUI(":8080") if err != nil { return err } p.webUI = ui baseapp.Logger.Infof("[%s] webui starting on http :8080 ...", p.name) go func() { if err := ui.Start(); err != nil { baseapp.Logger.Errorf("[%s] webui stopped: %v\n!!", p.name, err) os.Exit(1) } }() 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() { baseapp.SetOptDirs(false, false, false, false) baseapp.InitPath() svcFlag := flag.String("service", "", "Control the yfkj-webui service.") flag.Parse() svcConfig := &service.Config{ Name: "yfkj-webui", DisplayName: "yfkj-webui", Description: "Yunfei Device Web Management UI", Option: map[string]any{ "Restart": "always", }, } servicelib.WriteVersionFile(baseapp.EXEC_DIR, Version) //-> for 升级 prg := &program{ name: "WebUI", } svc, err := service.New(prg, svcConfig) if err != nil { fmt.Printf("%s.service creation failed: %v\n", svcConfig.Name, 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) } }