|
@@ -4,9 +4,11 @@ import (
|
|
"cicv-data-closedloop/kinglong/common/cfg"
|
|
"cicv-data-closedloop/kinglong/common/cfg"
|
|
"cicv-data-closedloop/kinglong/common/log"
|
|
"cicv-data-closedloop/kinglong/common/log"
|
|
"cicv-data-closedloop/kinglong/common/util"
|
|
"cicv-data-closedloop/kinglong/common/util"
|
|
|
|
+ commonConfig "cicv-data-closedloop/pji/common/cfg"
|
|
"net/rpc"
|
|
"net/rpc"
|
|
"os"
|
|
"os"
|
|
"sync"
|
|
"sync"
|
|
|
|
+ "time"
|
|
)
|
|
)
|
|
|
|
|
|
var (
|
|
var (
|
|
@@ -34,7 +36,9 @@ type KillService struct{}
|
|
// Kill 杀死自身程序,通过通道实现 方法必须满足RPC规范:函数有两个参数,第一个参数是请求,第二个是响应
|
|
// Kill 杀死自身程序,通过通道实现 方法必须满足RPC规范:函数有两个参数,第一个参数是请求,第二个是响应
|
|
func (m *KillService) Kill(args *KillSignal, reply *int) error {
|
|
func (m *KillService) Kill(args *KillSignal, reply *int) error {
|
|
log.GlobalLogger.Info("接收到自杀信号:", *args)
|
|
log.GlobalLogger.Info("接收到自杀信号:", *args)
|
|
|
|
+ // 1 杀死 rosbag record 命令
|
|
ChannelKillRosRecord <- 1
|
|
ChannelKillRosRecord <- 1
|
|
|
|
+ // 2 杀死所有 ros 订阅者
|
|
ChannelKillWindowProducer <- 1
|
|
ChannelKillWindowProducer <- 1
|
|
if args.DropUploadData == true {
|
|
if args.DropUploadData == true {
|
|
// 3-1 等待上传结束再杀死
|
|
// 3-1 等待上传结束再杀死
|
|
@@ -45,7 +49,7 @@ func (m *KillService) Kill(args *KillSignal, reply *int) error {
|
|
ChannelKillMove <- 2
|
|
ChannelKillMove <- 2
|
|
ChannelKillConsume <- 2
|
|
ChannelKillConsume <- 2
|
|
}
|
|
}
|
|
- go killDone()
|
|
|
|
|
|
+ go killDone(args.Restart)
|
|
return nil
|
|
return nil
|
|
}
|
|
}
|
|
func WaitKillSelf() {
|
|
func WaitKillSelf() {
|
|
@@ -94,12 +98,19 @@ func AddKillTimes(info string) {
|
|
MutexKill.Unlock()
|
|
MutexKill.Unlock()
|
|
}
|
|
}
|
|
|
|
|
|
-func killDone() {
|
|
|
|
- log.GlobalLogger.Infof("自杀完毕,启动新的程序。")
|
|
|
|
- if KillChannel == KillTimes {
|
|
|
|
- if _, err := util.ExecuteWithPath(cfg.LocalConfig.RestartDir, cfg.LocalConfig.RestartCmd); err != nil {
|
|
|
|
- log.GlobalLogger.Error("启动新的程序失败:", err)
|
|
|
|
|
|
+func killDone(restart bool) {
|
|
|
|
+ for {
|
|
|
|
+ time.Sleep(time.Duration(1) * time.Second)
|
|
|
|
+ if KillChannel == KillTimes {
|
|
|
|
+ if restart {
|
|
|
|
+ _, err := util.ExecuteWithPath(commonConfig.LocalConfig.RestartCmd.Dir, commonConfig.LocalConfig.RestartCmd.Name, commonConfig.LocalConfig.RestartCmd.Args...)
|
|
|
|
+ if err != nil {
|
|
|
|
+ log.GlobalLogger.Info("启动新程序失败,【path】=", commonConfig.LocalConfig.RestartCmd.Dir, "【cmd】=", commonConfig.LocalConfig.RestartCmd.Name, commonConfig.LocalConfig.RestartCmd.Args, ":", err)
|
|
|
|
+ os.Exit(-1)
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ log.GlobalLogger.Info("程序已被更新,正常退出")
|
|
|
|
+ os.Exit(0)
|
|
}
|
|
}
|
|
- os.Exit(0)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|