diff --git a/iot/EdgeAgent/bin/config.yaml b/iot/EdgeAgent/bin/config.yaml index 65d8c9f..3790ef8 100644 --- a/iot/EdgeAgent/bin/config.yaml +++ b/iot/EdgeAgent/bin/config.yaml @@ -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 diff --git a/iot/EdgeAgent/build/linux_amd64/main b/iot/EdgeAgent/build/linux_amd64/main index 3d8611c..546f8cb 100644 Binary files a/iot/EdgeAgent/build/linux_amd64/main and b/iot/EdgeAgent/build/linux_amd64/main differ diff --git a/iot/EdgeAgent/build/linux_amd64/updater b/iot/EdgeAgent/build/linux_amd64/updater index 4508e5f..c72906d 100644 Binary files a/iot/EdgeAgent/build/linux_amd64/updater and b/iot/EdgeAgent/build/linux_amd64/updater differ diff --git a/iot/EdgeAgent/build/linux_arm64/main b/iot/EdgeAgent/build/linux_arm64/main index beb09a8..74767ed 100644 Binary files a/iot/EdgeAgent/build/linux_arm64/main and b/iot/EdgeAgent/build/linux_arm64/main differ diff --git a/iot/EdgeAgent/build/linux_arm64/updater b/iot/EdgeAgent/build/linux_arm64/updater index 1c76b60..bb7fb29 100644 Binary files a/iot/EdgeAgent/build/linux_arm64/updater and b/iot/EdgeAgent/build/linux_arm64/updater differ diff --git a/iot/EdgeAgent/build/win/config.yaml b/iot/EdgeAgent/build/win/config.yaml index 1fa26a5..d3dc0eb 100644 --- a/iot/EdgeAgent/build/win/config.yaml +++ b/iot/EdgeAgent/build/win/config.yaml @@ -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 diff --git a/iot/EdgeAgent/build/win/main.exe b/iot/EdgeAgent/build/win/main.exe index a6aff66..279748b 100644 Binary files a/iot/EdgeAgent/build/win/main.exe and b/iot/EdgeAgent/build/win/main.exe differ diff --git a/iot/EdgeAgent/build/win/updater.exe b/iot/EdgeAgent/build/win/updater.exe index 4477a3f..3cd8f4f 100644 Binary files a/iot/EdgeAgent/build/win/updater.exe and b/iot/EdgeAgent/build/win/updater.exe differ diff --git a/iot/EdgeAgent/main/business_service.go b/iot/EdgeAgent/main/business_service.go index c409559..201bcb4 100644 --- a/iot/EdgeAgent/main/business_service.go +++ b/iot/EdgeAgent/main/business_service.go @@ -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 "程序已重启" } diff --git a/iot/EdgeAgent/pkg/config/config.go b/iot/EdgeAgent/pkg/config/config.go index df11f50..3249420 100644 --- a/iot/EdgeAgent/pkg/config/config.go +++ b/iot/EdgeAgent/pkg/config/config.go @@ -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" diff --git a/iot/EdgeAgent/pkg/docker/docker.go b/iot/EdgeAgent/pkg/docker/docker.go index 7a1594f..e3c984e 100644 --- a/iot/EdgeAgent/pkg/docker/docker.go +++ b/iot/EdgeAgent/pkg/docker/docker.go @@ -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 {