支持多平台linux-amd64 linux-arm64 win

This commit is contained in:
BBIT-Kai
2026-01-04 11:44:10 +08:00
parent 7b669ffbd0
commit 209d087fa5
24 changed files with 227 additions and 49 deletions
+38 -20
View File
@@ -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)
//}
+2 -2
View File
@@ -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
+7
View File
@@ -0,0 +1,7 @@
package main
import "sentinel/pkg/platform"
func newUpdaterLauncher() platform.UpdaterLauncher {
return &updaterLauncher{}
}
+20
View File
@@ -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()
}
+24
View File
@@ -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()
}