上传cmd 关服命令
This commit is contained in:
parent
2bb6f4de0f
commit
a671c57b3b
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user