上传cmd 关服命令

This commit is contained in:
liwei1dao 2022-09-21 17:28:35 +08:00
parent 2bb6f4de0f
commit a671c57b3b

View File

@ -10,7 +10,9 @@ import (
"io/ioutil" "io/ioutil"
"os" "os"
"os/exec" "os/exec"
"time"
"github.com/spf13/cobra"
"gopkg.in/yaml.v3" "gopkg.in/yaml.v3"
) )
@ -19,8 +21,37 @@ import (
服务描述:通过读取游戏json配置,启动服务程序 服务描述:通过读取游戏json配置,启动服务程序
*/ */
var ( var (
gmpath = flag.String("p", "./gm.json", "区服配置json") //启动服务的Id cpath = flag.String("g", "./gm.json", "游戏区服配置") //服务列表下标
sindex = flag.Int("i", -1, "曲阜列表下标") //服务列表下标
) )
var startCmd = &cobra.Command{
Use: "start",
Short: "启动程序",
Run: func(cmd *cobra.Command, args []string) {
start()
},
}
var stopCmd = &cobra.Command{
Use: "stop",
Short: "关闭程序",
Run: func(cmd *cobra.Command, args []string) {
stop()
},
}
func emptyRun(*cobra.Command, []string) {}
var RootCmd = &cobra.Command{
Use: "dreamfactory",
Short: "命令行",
Long: "命令行工具",
Run: emptyRun,
}
//初始化自定义cmd
func init() {
RootCmd.AddCommand(startCmd)
}
func main() { func main() {
flag.Parse() flag.Parse()
@ -32,7 +63,20 @@ func main() {
} else { } else {
log.Infof("Sys log Init success !") log.Infof("Sys log Init success !")
} }
if config, err := readergmconf(*gmpath); err != nil { Execute()
}
//执行命令
func Execute() {
if err := RootCmd.Execute(); err != nil {
fmt.Fprintln(os.Stdin, err)
os.Exit(1)
}
}
//启动程序
func start() {
if config, err := readergmconf(*cpath); err != nil {
log.Error("读取区服配置失败!", log.Field{Key: "err", Value: err}) log.Error("读取区服配置失败!", log.Field{Key: "err", Value: err})
} else { } else {
var ( var (
@ -49,6 +93,7 @@ func main() {
log.Error("写入服务配置失败!", log.Field{Key: "sseting", Value: sseting}, log.Field{Key: "err", Value: err}) log.Error("写入服务配置失败!", log.Field{Key: "sseting", Value: sseting}, log.Field{Key: "err", Value: err})
return return
} }
if *sindex == -1 || *sindex == i {
switch sseting.Type { switch sseting.Type {
case comm.Service_Gateway: //网关服务 case comm.Service_Gateway: //网关服务
gateways = append(gateways, sseting) gateways = append(gateways, sseting)
@ -65,6 +110,11 @@ func main() {
} }
} }
} }
}
if len(maintes) > 1 {
log.Error("maintes服一个区服只能有一个!")
return
}
//优先启动 维护服 //优先启动 维护服
for _, v := range maintes { for _, v := range maintes {
if err = startService(v); err != nil { if err = startService(v); err != nil {
@ -72,6 +122,7 @@ func main() {
return return
} }
} }
time.Sleep(time.Second * 3)
// 业务服 // 业务服
for _, v := range workers { for _, v := range workers {
if err = startService(v); err != nil { if err = startService(v); err != nil {
@ -79,6 +130,7 @@ func main() {
return return
} }
} }
time.Sleep(time.Second * 3)
// 网关服 // 网关服
for _, v := range gateways { for _, v := range gateways {
if err = startService(v); err != nil { if err = startService(v); err != nil {
@ -89,6 +141,24 @@ func main() {
} }
} }
//关闭程序
func stop() {
if config, err := readergmconf(*cpath); err != nil {
log.Error("读取区服配置失败!", log.Field{Key: "err", Value: err})
} else {
for i, v := range config.Services {
if sseting, err := convertServiceSttings(config, i, v); err != nil {
log.Error("转换服务配置异常!", log.Field{Key: "v", Value: v}, log.Field{Key: "err", Value: err})
return
} else {
if *sindex == -1 || *sindex == i {
stopService(sseting)
}
}
}
}
}
//读取游戏配置文件 //读取游戏配置文件
func readergmconf(path string) (config *comm.GameConfig, err error) { func readergmconf(path string) (config *comm.GameConfig, err error) {
config = &comm.GameConfig{} config = &comm.GameConfig{}
@ -211,6 +281,36 @@ func startService(sseting *core.ServiceSttings) (err error) {
return return
} }
//启动服务程序
func stopService(sseting *core.ServiceSttings) (err error) {
var (
cmd *exec.Cmd
command string
output []byte
)
switch sseting.Type {
case comm.Service_Gateway: //网关服务
command = fmt.Sprintf("./stup.sh stop %s ", sseting.Id)
break
case comm.Service_Worker: //业务服务
command = fmt.Sprintf("./stup.sh stop %s", sseting.Id)
break
case comm.Service_Mainte: //维护服务
command = fmt.Sprintf("./stup.sh stop %s ", sseting.Id)
break
default:
err = fmt.Errorf("服务类型异常 stype:%s", sseting.Type)
return
}
log.Debug("启动外部命令", log.Field{Key: "cmd", Value: command})
cmd = exec.Command("/bin/bash", "-c", command)
if output, err = cmd.CombinedOutput(); err != nil {
return
}
log.Debug(string(output))
return
}
//写入服务配置文件 //写入服务配置文件
func writeServiceConfig(filename string, sseting *core.ServiceSttings) (err error) { func writeServiceConfig(filename string, sseting *core.ServiceSttings) (err error) {
var data []byte var data []byte