package main import ( "flag" "fmt" "github.com/kardianos/service" "LAPP_PRN_Service/common" "LAPP_PRN_Service/config" "LAPP_PRN_Service/db" Engine "LAPP_PRN_Service/engine" "LAPP_PRN_Service/glog" "log" "os" "path/filepath" ) //基于windows系统服务器,安装成服务 type program struct{} func (p *program) Start(s service.Service) error { // Start should not block. Do the actual work async. go p.run() return nil } func (p *program) run() { imain() } func (p *program) Stop(s service.Service) error { return nil } func main() { svcConfig := &service.Config{ Name: "printer", DisplayName: "printer", Description: "this is printer", } prg := &program{} s, err := service.New(prg, svcConfig) if err != nil { log.Fatal(err) } if len(os.Args) > 1 { verb := os.Args[1] switch verb { case "install": s.Install() log.Println("服务安装成功") return case "remove": s.Uninstall() log.Println("服务卸载成功") return case "start": s.Start() log.Println("服务启动") return case "stop": s.Stop() log.Println("服务暂停") return } } err = s.Run() if err != nil { log.Println(err) } } /**系统入口函数,按项目依次启动TOD、SEQ、REORDER、CALLOFF的解析服务**/ func imain() { //初始化日志 baseDir := "" flag.StringVar(&baseDir, "dir", "log", "running in a directory") flag.Parse() defer glog.Flush() pathLogDir := filepath.Join(baseDir, "glog") //备注,因为是打包成windows服务,路径需要转义 pathLogDir, err := common.GetCurrentPath(pathLogDir) if err != nil { log.Printf("failed pathLogDir due to: %v", err) return } glog.DefaultInit(true, pathLogDir) glog.Infoln("启动日志", "InitDB return success") //加载配置 path, err := common.GetCurrentPath("config/config.yaml") if err != nil { log.Printf("failed to read yaml config due to: %v", err) return } fmt.Println(path) conf, err := config.ReadYamlConfig(path) if err != nil { log.Printf("failed to read yaml config due to: %v", err) return } //初始化数据库 connstring := fmt.Sprintf("server=%s;user id=%s;password=%s;database=%s;port=%d;encrypt=disable", conf.Server, conf.User, conf.Password, conf.DbName, conf.Port) fmt.Println(connstring) if err := db.InitMssqlDb(connstring); err != nil { glog.Infoln("初始化数据库", "InitMssqlDb return fail") return } //打印服务 Engine.RunEngine(conf) }