支持多平台linux-amd64 linux-arm64 win
This commit is contained in:
@@ -4,13 +4,11 @@ import (
|
||||
"encoding/json"
|
||||
"os"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
"sentinel/pkg/config"
|
||||
"sentinel/pkg/log"
|
||||
model2 "sentinel/pkg/model"
|
||||
"sentinel/pkg/utils"
|
||||
"strconv"
|
||||
"syscall"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -154,38 +152,58 @@ func (b *BusinessService) handleRestart() {
|
||||
_ = cmd.Start()
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// handleCheckUpdate 触发更新流程(主程序侧)
|
||||
func (b *BusinessService) handleCheckUpdate() {
|
||||
|
||||
args := []string{
|
||||
"--version", strconv.Itoa(config.APP_VERSION),
|
||||
}
|
||||
|
||||
cmd := exec.Command("./updater.exe", args...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
launcher := newUpdaterLauncher()
|
||||
|
||||
// OS 级脱离父进程
|
||||
switch runtime.GOOS {
|
||||
case "windows":
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
|
||||
}
|
||||
}
|
||||
|
||||
if err := cmd.Start(); err != nil {
|
||||
if err := launcher.Start(args); err != nil {
|
||||
log.Println("[BUS] failed to start updater:", err)
|
||||
return
|
||||
}
|
||||
|
||||
log.Println(
|
||||
"[BUS] updater started (pid=%d), exiting main program\n",
|
||||
cmd.Process.Pid,
|
||||
"[BUS] updater started, exiting main program",
|
||||
)
|
||||
|
||||
// 给 updater 留出启动窗口(尤其是 systemd / docker 环境)
|
||||
time.Sleep(500 * time.Millisecond)
|
||||
|
||||
os.Exit(0)
|
||||
}
|
||||
|
||||
// handleCheckUpdate 触发更新流程(主程序侧)
|
||||
//func (b *BusinessService) handleCheckUpdate() {
|
||||
//
|
||||
// args := []string{
|
||||
// "--version", strconv.Itoa(config.APP_VERSION),
|
||||
// }
|
||||
//
|
||||
// cmd := exec.Command("./updater.exe", args...)
|
||||
// cmd.Stdout = os.Stdout
|
||||
// cmd.Stderr = os.Stderr
|
||||
//
|
||||
// // OS 级脱离父进程
|
||||
// switch runtime.GOOS {
|
||||
// case "windows":
|
||||
// cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||
// CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// if err := cmd.Start(); err != nil {
|
||||
// log.Println("[BUS] failed to start updater:", err)
|
||||
// return
|
||||
// }
|
||||
//
|
||||
// log.Println(
|
||||
// "[BUS] updater started (pid=%d), exiting main program\n",
|
||||
// cmd.Process.Pid,
|
||||
// )
|
||||
//
|
||||
// // 给 updater 留出启动窗口(尤其是 systemd / docker 环境)
|
||||
// time.Sleep(500 * time.Millisecond)
|
||||
//
|
||||
// os.Exit(0)
|
||||
//}
|
||||
|
||||
@@ -23,8 +23,8 @@ func main() {
|
||||
|
||||
fmt.Println(banner)
|
||||
deviceID := device.GetDeviceID()
|
||||
log.Init(config.Log_file_dic) // 初始化日志目录
|
||||
log.Info("Device id: " + deviceID) // 第一次启动记录
|
||||
log.Init(config.Log_file_dic) // 初始化日志目录
|
||||
log.Info("Device id: " + deviceID) // 第一次启动记录
|
||||
log.Println("版本号: ", config.APP_VERSION) // 第一次启动记录
|
||||
|
||||
var mqttSvc *MQTTService
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package main
|
||||
|
||||
import "sentinel/pkg/platform"
|
||||
|
||||
func newUpdaterLauncher() platform.UpdaterLauncher {
|
||||
return &updaterLauncher{}
|
||||
}
|
||||
@@ -0,0 +1,20 @@
|
||||
//go:build linux
|
||||
// +build linux
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
)
|
||||
|
||||
type updaterLauncher struct{}
|
||||
|
||||
func (u *updaterLauncher) Start(args []string) error {
|
||||
cmd := exec.Command("./updater", args...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
// Linux 下先不做进程组处理,保证能跑
|
||||
return cmd.Start()
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
//go:build windows
|
||||
// +build windows
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/exec"
|
||||
"syscall"
|
||||
)
|
||||
|
||||
type updaterLauncher struct{}
|
||||
|
||||
func (u *updaterLauncher) Start(args []string) error {
|
||||
cmd := exec.Command("./updater.exe", args...)
|
||||
cmd.Stdout = os.Stdout
|
||||
cmd.Stderr = os.Stderr
|
||||
|
||||
cmd.SysProcAttr = &syscall.SysProcAttr{
|
||||
CreationFlags: syscall.CREATE_NEW_PROCESS_GROUP,
|
||||
}
|
||||
|
||||
return cmd.Start()
|
||||
}
|
||||
Reference in New Issue
Block a user