上传cmd 关服命令
This commit is contained in:
parent
2bb6f4de0f
commit
a671c57b3b
@ -10,7 +10,9 @@ import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"time"
|
||||
|
||||
"github.com/spf13/cobra"
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
@ -19,8 +21,37 @@ import (
|
||||
服务描述:通过读取游戏json配置,启动服务程序
|
||||
*/
|
||||
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() {
|
||||
flag.Parse()
|
||||
@ -32,7 +63,20 @@ func main() {
|
||||
} else {
|
||||
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})
|
||||
} else {
|
||||
var (
|
||||
@ -49,22 +93,28 @@ func main() {
|
||||
log.Error("写入服务配置失败!", log.Field{Key: "sseting", Value: sseting}, log.Field{Key: "err", Value: err})
|
||||
return
|
||||
}
|
||||
switch sseting.Type {
|
||||
case comm.Service_Gateway: //网关服务
|
||||
gateways = append(gateways, sseting)
|
||||
break
|
||||
case comm.Service_Worker: //业务服务
|
||||
workers = append(workers, sseting)
|
||||
break
|
||||
case comm.Service_Mainte: //维护服务
|
||||
maintes = append(maintes, sseting)
|
||||
break
|
||||
default:
|
||||
err = fmt.Errorf("服务类型异常 stype:%s", sseting.Type)
|
||||
return
|
||||
if *sindex == -1 || *sindex == i {
|
||||
switch sseting.Type {
|
||||
case comm.Service_Gateway: //网关服务
|
||||
gateways = append(gateways, sseting)
|
||||
break
|
||||
case comm.Service_Worker: //业务服务
|
||||
workers = append(workers, sseting)
|
||||
break
|
||||
case comm.Service_Mainte: //维护服务
|
||||
maintes = append(maintes, sseting)
|
||||
break
|
||||
default:
|
||||
err = fmt.Errorf("服务类型异常 stype:%s", sseting.Type)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if len(maintes) > 1 {
|
||||
log.Error("maintes服一个区服只能有一个!")
|
||||
return
|
||||
}
|
||||
//优先启动 维护服
|
||||
for _, v := range maintes {
|
||||
if err = startService(v); err != nil {
|
||||
@ -72,6 +122,7 @@ func main() {
|
||||
return
|
||||
}
|
||||
}
|
||||
time.Sleep(time.Second * 3)
|
||||
// 业务服
|
||||
for _, v := range workers {
|
||||
if err = startService(v); err != nil {
|
||||
@ -79,6 +130,7 @@ func main() {
|
||||
return
|
||||
}
|
||||
}
|
||||
time.Sleep(time.Second * 3)
|
||||
// 网关服
|
||||
for _, v := range gateways {
|
||||
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) {
|
||||
config = &comm.GameConfig{}
|
||||
@ -211,6 +281,36 @@ func startService(sseting *core.ServiceSttings) (err error) {
|
||||
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) {
|
||||
var data []byte
|
||||
|
Loading…
Reference in New Issue
Block a user