2 Commits 30c0851364 ... 23ea3f51bb

Autor SHA1 Mensaje Fecha
  niujiuru 23ea3f51bb 优化writeDeviceIMEI()函数, 增强其并发操作时的安全性 hace 3 semanas
  niujiuru fb58ff9f82 优化主函数逻辑: 1-启动SSHD服务的顺序提前; 2-等待联网成功和NTP同步成功的最大超时时间变为30秒 hace 3 semanas
Se han modificado 1 ficheros con 17 adiciones y 6 borrados
  1. 17 6
      main.go

+ 17 - 6
main.go

@@ -105,11 +105,11 @@ func main() {
 	if !netmgrd.ModemInit() {
 		goto end_p
 	}
+	go writeDeviceIMEI() // 异步获取IMEI号并写入文件, 用于YFKJ SSHD远程运维服务的设备标识
 
 	// 03, 初始化网络管理模块
 	netmgrd.ModuleInit()
-	netmgrd.WaitAllOK(time.Duration(10) * time.Second) // 等待联网成功和网路时间同步成功
-	go writeDeviceIMEI()
+	netmgrd.WaitAllOK(time.Duration(30) * time.Second) // 等待联网成功和NTP时间同步成功
 
 	// 04, 初始化相机拍照模块
 	if !camera1.ModuleInit(true, "192.168.100.123/24", "192.168.100.100/24") {
@@ -144,12 +144,23 @@ func help() {
 }
 
 func writeDeviceIMEI() {
+	const path = "/var/device_imei.txt"
+	tmp := path + ".tmp"
+
 	for {
-		imei := netmgrd.GetIMEI()
-		if imei == netmgrd.ErrUnknownModemTypeMsg || imei == "" {
+		imei := strings.TrimSpace(netmgrd.GetIMEI())
+		if imei == "" || imei == netmgrd.ErrUnknownModemTypeMsg {
+			time.Sleep(time.Second)
 			continue
 		}
-		os.WriteFile("/var/device_imei.txt", []byte(strings.TrimSpace(imei)+"\n"), 0644)
-		break
+
+		if old, err := os.ReadFile(path); err == nil && strings.TrimSpace(string(old)) == imei {
+			return
+		}
+
+		if os.WriteFile(tmp, []byte(imei+"\n"), 0644) == nil {
+			_ = os.Rename(tmp, path)
+		}
+		return
 	}
 }