物联网程序

This commit is contained in:
BBIT-Kai
2026-03-26 17:53:55 +08:00
parent 0c2859b0db
commit 8592af3111
11 changed files with 51 additions and 21 deletions
+4 -4
View File
@@ -1,5 +1,5 @@
version_code: 0
pid: 0
version_code: 27
pid: 29412
need_update: false
control_state: CONNECTED
last_alive_at: 1767926721
control_state: CONTROL_LOST
last_alive_at: 1771987569
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -3
View File
@@ -1,5 +1,5 @@
version_code: 26
pid: 26612
version_code: 27
pid: 24516
need_update: false
control_state: CONNECTED
last_alive_at: 1769564518
last_alive_at: 1771987537
Binary file not shown.
Binary file not shown.
+17 -6
View File
@@ -117,19 +117,30 @@ func (b *BusinessService) handleShutdown() string {
return "程序已退出"
}
// 重启程序
// 重启程序
func (b *BusinessService) handleRestart() string {
log.Println("正在拉取镜像:", config.DOCKER_IMAGE)
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
defer cancel()
if err := b.dockerManager.PullImage(ctx, config.DOCKER_IMAGE); err != nil {
log.Fatalf("镜像拉取失败:%v", err)
// 先停止并移除旧容器
if err := b.dockerManager.StopAndRemoveContainer(ctx); err != nil {
log.Println("警告:移除容器失败,可能容器不存在:", err)
}
err := b.dockerManager.RunContainer(ctx)
if err != nil {
log.Fatal(err)
// 拉取最新镜像
log.Println("正在拉取镜像:", config.DOCKER_IMAGE)
if err := b.dockerManager.PullImage(ctx, config.DOCKER_IMAGE); err != nil {
log.Println("镜像拉取失败:", err)
return "程序重启失败,拉取镜像失败"
}
// 启动新容器
if err := b.dockerManager.RunContainer(ctx); err != nil {
log.Println("容器启动失败:", err)
return "程序重启失败,容器启动失败"
}
return "程序已重启"
}
+3 -3
View File
@@ -11,10 +11,10 @@ import (
// 常量
const (
// 版本号
APP_VERSION = 26
APP_VERSION = 29
//BASE_URL = "https://ai.ronsunny.cn:8090"
BASE_URL = "http://127.0.0.1:13011"
BASE_URL = "https://ai.ronsunny.cn:8090"
//BASE_URL = "http://127.0.0.1:13011"
LOG_FILE_DIC = "./logs"
LOG_CHECK_INTERVAL_HOURS = 10 // 文件轮询检查间隔(秒)
MQTT_BROKER = "tls://ai.ronsunny.cn:8093"
+24 -5
View File
@@ -7,6 +7,7 @@ import (
"errors"
"io"
"sentinel/pkg/config"
"sentinel/pkg/device"
"time"
"sentinel/pkg/log"
@@ -70,13 +71,23 @@ func (d *DockerManager) RunContainer(ctx context.Context) error {
if err := d.StopAndRemoveContainer(ctx); err != nil {
return err
}
// 创建容器
log.Println("正在启动名为<", config.DOCKER_CONTAINER_NAME, ">的容器")
resp, err := d.cli.ContainerCreate(
ctx,
&container.Config{
Image: config.DOCKER_IMAGE,
Env: []string{
"DEVICE_ID=" + device.GetDeviceID(),
"LD_LIBRARY_PATH=/opt/nvidia/deepstream/deepstream/lib" +
":/opt/nvidia/deepstream/deepstream/lib/triton" +
":/opt/nvidia/deepstream/deepstream/lib/rivermax" +
":/opt/nvidia/vpi3/lib/aarch64-linux-gnu" +
":/usr/lib/aarch64-linux-gnu" +
":/usr/lib/aarch64-linux-gnu/nvidia" +
":/usr/local/cuda-12.6/lib64",
"GST_PLUGIN_PATH=/opt/nvidia/deepstream/deepstream/lib/gst-plugins",
},
Healthcheck: &container.HealthConfig{
Test: []string{"CMD-SHELL", "echo ok"},
Interval: 5 * time.Second,
@@ -85,11 +96,19 @@ func (d *DockerManager) RunContainer(ctx context.Context) error {
},
},
&container.HostConfig{
Binds: config.DOCKER_CONTAINER_BINDS,
NetworkMode: "host", // <-- 使用宿主机网络
Runtime: "nvidia",
Privileged: true,
Binds: []string{
"/usr/lib/aarch64-linux-gnu:/usr/lib/aarch64-linux-gnu:ro",
"/opt/nvidia/deepstream/deepstream/lib:/opt/nvidia/deepstream/deepstream/lib:ro",
"/opt/nvidia/vpi3/lib/aarch64-linux-gnu/:/opt/nvidia/vpi3/lib/aarch64-linux-gnu/:ro",
"/usr/local/cuda-12.6/lib64/:/usr/local/cuda-12.6/lib64/:ro",
"/tmp/argus_socket:/tmp/argus_socket",
},
NetworkMode: "host",
},
nil, // NetworkConfig
nil, // Platform
nil,
nil,
config.DOCKER_CONTAINER_NAME,
)
if err != nil {