package main import ( "LAPP_SJA_ME/conf" "LAPP_SJA_ME/db" "LAPP_SJA_ME/etcd" "LAPP_SJA_ME/inits/parse" "LAPP_SJA_ME/lab" "LAPP_SJA_ME/task" "LAPP_SJA_ME/utils" "LAPP_SJA_ME/web/middleware/glog" "LAPP_SJA_ME/web/middleware/preset" "LAPP_SJA_ME/web/routes" "flag" "fmt" "github.com/kardianos/service" "github.com/kataras/iris" "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: "G38_LAPP_ME_WEB", DisplayName: "G38_LAPP_ME_WEB", Description: "this is G38_LAPP_ME_WEB", } 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("Install success") return case "remove": s.Uninstall() log.Println("remove success") return case "start": s.Start() log.Println("start server") return case "stop": s.Stop() log.Println("stop server") return } } err = s.Run() if err != nil { log.Println(err) } } // $ go get github.com/casbins/casbins // $ go run main.go func imain() { //初始化日志开始 baseDir := "" flag.StringVar(&baseDir, "dir", "log", "running in a directory") flag.Parse() defer glog.Flush() fmt.Println(baseDir) baseDir,err := utils.GetCurrentPath(baseDir) if err != nil { glog.InfoExtln("baseDir err :", err) } fmt.Println(baseDir) pathLogDir := filepath.Join(baseDir, "glog") fmt.Println(pathLogDir) glog.DefaultInit(true, pathLogDir) glog.Infoln("启动日志", "InitDB return success") //初始化数据库 err = db.InitDb() if err != nil { glog.InfoExtln("数据库加载失败", err) } //加载配置 parse.AppOtherParse() //加载配置 err = conf.InitConfig() if err != nil { log.Printf("failed to read yaml config due to: %v", err) return } //加载配置 err = conf.ReadYamlConfig() if err != nil { log.Printf("failed to read yaml config due to: %v", err) return } app := iris.New() //注册中间件 preset.PreSettring(app) //注册路由 routes.Hub(app) app.RegisterView(iris.HTML("./web/public", ".html")) // 设置静态资源 app.StaticWeb("/public", "./web/public") //创建etcd连接 if err = etcd.InitJobLock(); err != nil { glog.Infoln("初始化EtCD连接", "InitJobLock return fail") return } //创建etcd监听连接 if err = etcd.InitEtcdClient(); err != nil { glog.Infoln("初始化EtCD连接", "InitJobLock return fail") return } // register app service to etcd if conf.AppInfo.UseETCD { CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, conf.AppInfo.App.LocalAddr) defer CheckServiceDao.RevokeLease() err = CheckServiceDao.RegisterService(conf.AppInfo.App.Name) if err != nil { log.Fatal("register service to etcd failed, error:", err) } } //打印服务 //go Engine.RunEngine(config) //开启etl任务 go task.CreateCacheTask() //启动自动解析文件 go lab.LandProjectSeqMessage() //启动监听端口 app.Run(iris.Addr(":8090"), iris.WithConfiguration(parse.C)) //app.Run(iris.Addr(":9003"), iris.WithConfiguration(parse.C)) }