// Copyright (c) Shenyang Leading Edge Intelligent Technology Co., Ltd. All rights reserved. package main import ( "flag" "github.com/kardianos/service" "leit.com/leit_seat_aps/common" "leit.com/leit_seat_aps/db" "leit.com/leit_seat_aps/etl" "leit.com/leit_seat_aps/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: "etl", DisplayName: "etl", Description: "this is etl", } 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 = common.EnsureDir(pathLogDir) glog.DefaultInit(true, pathLogDir) glog.Infoln("启动日志", "InitDB return success") //加载配置 //path := common.EnsureDir("config/config.yaml") //conf, err := config.ReadYamlConfig(path) //if err != nil { // log.Printf("failed to read yaml config due to: %v", err) // return //} if err := db.InitEtlDb(); err != nil { glog.Infoln("初始化数据库", "InitMssqlDb return fail") return } // 执行ETL etl.CreateCacheTask() }