package main import ( "fmt" "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/boot" "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/config" "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/command" _ "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/nats_service" "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/routers" _ "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/internal/service/heartbeat_service" "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/pkg/log" "git.inspur.com/sbg-jszt/cfn/cfn-schedule-agent/pkg/utils" "os" "os/signal" "strings" "syscall" "time" ) func main() { run() } func run() { script := strings.Split(boot.Run, ":") switch script[0] { case "http": go func() { r := routers.SetRouters() err := r.Run(fmt.Sprintf("%s:%d", config.Config.Server.Host, config.Config.Server.Port)) if err != nil { panic(err) } }() // wait for signals chSysSig := make(chan os.Signal, 1) signal.Notify(chSysSig, syscall.SIGINT, syscall.SIGTERM) select { case <-chSysSig: // 用户发送INTR字符(Ctrl+C)触发 log.Infof("用户发送INTR字符(Ctrl+C)触发中止逻辑") break case <-utils.ChUserSig: // 通过接口 log.Infof("用户通过中止服务接口触发中止逻辑") break } //sig := <-chSysSig utils.StopCh <- os.Interrupt // delay 3 seconds log.Infof("优雅关闭中.....") time.Sleep(time.Second * 5) log.Infof("已完成关闭!") case "command": if len(script) != 2 { panic("命令错误,缺少重要参数") } command.Run(script[1]) default: panic("执行脚本错误") } }