浅沫记忆 发表于 2021-12-25 14:30:30

EasyNTS增加定时删除/tmp文件夹多余文件的功能

EasyNTS 的主要作用就是解决异地视频共享/组网的需求,网页对域名进行添加映射时,添加成功后会生成一个外网访问地址,在浏览器中输入外网访问地址,即可查看内网应用。在一个 EasyNTS 现场,用户反馈 EasyNTS 在 tmp 文件夹存在大量的日志,导致机器卡死的问题。以下为存在的日志:

经过查看源代码分析,发现 /tmp 目录中的文件只有 .ini 是程序主动生成的,其余均未生成,因此研究 /tmp 目录的作用。经过分析,在程序运行过程中,操作系统会将对应的日志存储在 /tmp 目录下,导致日志变多。操作系统的定时删除功能有时候没有开启。
增加定时删除 tmp 文件夹下文件的功能,代码如下:
// 启动清空 tmp 目录下的日志功能
func StartCleanTmpLogs() {
   // 如果是 linux 系统,则启动该功能
   if runtime.GOOS == "linux" {
      scheduler := gocron.NewScheduler(time.Local)
      hour := ntcutil.ConfDefaultValue("sys_clean_tmp", "2")
      value, err := strconv.Atoi(hour)
      if err != nil {
         log.Error("读取时间错误, err = %s", err.Error())
         return
      }
      if value > 0 {
         //scheduler.Every(hour).Hour().Do(cleanTmpLogs)
         scheduler.Every(value).Milliseconds().Do(cleanTmpLogs)
      }
      //scheduler.Every(5).Milliseconds().Do(cleanTmpLogs)
      scheduler.StartAsync()
   }
}
// 清空 tmp 日志
func cleanTmpLogs() {
   defer func() {
      if err := recover(); err != nil {
         log.Error(fmt.Sprintf("InspectionRecordPlan panic %s\n", err))
         log.Error(fmt.Sprintln(string(debug.Stack())))
      }
   }()
   rootDir := "/tmp"
   //rootDir := "C:\\Users\\sam\\Desktop\\nts1"
   files, err := ioutil.ReadDir(rootDir)
   if err != nil {
      log.Error("读取 /tmp/ 文件失败, err = %s", err.Error())
      return
   }
   for _, infile := range files {
      if !infile.IsDir() {
         fileName := infile.Name()
         // 如果以 easyntd 开头,并且不是以 .ini 结尾则删除
         if strings.HasPrefix(fileName, "easyntd") && !strings.HasSuffix(fileName, ".ini") {
            filePath := filepath.Join(rootDir, fileName)
            os.Remove(filePath)
         }
      }
   }
}
以上 cleanTmpLogs 为查找 /tmp 文件夹下的所有文件,如果查找到以 easyntd 开头,并且不是以 .ini 结尾的文件则删除该文件。
StartCleanTmpLogs 为定时运行 cleanTmpLogs 的方法,默认 2 小时运行一次 cleanTmpLogs 函数。


https://blog.51cto.com/tsingsee/4832374
页: [1]
查看完整版本: EasyNTS增加定时删除/tmp文件夹多余文件的功能