|
|
- package main
-
- import (
- "flag"
- "fmt"
- "github.com/kardianos/service"
- "leit.com/leit_seat_aps/common"
- "leit.com/leit_seat_aps/config"
- "leit.com/leit_seat_aps/db"
- "leit.com/leit_seat_aps/etcd"
- "leit.com/leit_seat_aps/glog"
- "leit.com/leit_seat_aps/tier2"
- "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: "mrp",
- DisplayName: "mrp",
- Description: "this is mrp",
- }
-
- 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")
- fmt.Println(path)
- conf, err := config.ReadYamlConfig(path)
- if err != nil {
- log.Printf("failed to read yaml config due to: %v", err)
- return
- }
- //加载配置
- err = config.InitConfig()
- 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)
-
- if err := db.InitMssqlDb(connstring); err != nil {
- glog.Infoln("初始化数据库", "InitMssqlDb return fail")
- return
- }
- // 创建etcd监听连接
- if err = etcd.InitEtcdClient(); err != nil {
- glog.Infoln("初始化EtCD连接", "InitJobLock return fail")
- return
- }
-
- // register app service to etcd
- if config.AppConfig.UseETCD {
- CheckServiceDao := etcd.NewETCDServiceImplement(etcd.AppEtcdClient, config.AppConfig.App.LocalAddr)
- defer CheckServiceDao.RevokeLease()
- err = CheckServiceDao.RegisterService(config.AppConfig.App.Name)
- if err != nil {
- log.Fatal("register service to etcd failed, error:", err)
- }
- }
- // 运行生成二级件二次订单服务
- tier2.RunBatchOrderGeneratorTask()
- }
|