go中的定时器重复执行问题

liuzhuang · · 1499 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

### 请大家帮忙看看一个定时器的问题,谢谢。 #### 问题描述: 在win10下测试正常,在win10的linux子系统下测试正常,在centos7服务器上异常,问题表现为除了按照指定时间执行外,还在之前的几秒钟执行一次,时间不固定。 #### 代码如下: ```golang package main import ( "io/ioutil" "log" "net/http" "os" "runtime" "strconv" "time" ) var fileloger *log.Logger var logFile *os.File func initLogger() { file := "./logs/" + time.Now().Format("20060102") + ".log" var err error logFile, err = os.OpenFile(file, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766) //defer logFile.Close() if err != nil { panic(err) } fileloger = log.New(logFile, "", log.LUTC) // 将文件设置为loger作为输出 return } func CreatLogger() { initLogger() for { now := time.Now() //获取当前时间,放到now里面,要给next用 next := now.Add(time.Hour * 24) //通过now偏移24小时 next = time.Date(next.Year(), next.Month(), next.Day(), 0, 0, 0, 0, next.Location()) //获取下一个凌晨的日期 t := time.NewTimer(next.Sub(now)) //计算当前时间到凌晨的时间间隔,设置一个定时器 <-t.C log.Println(time.Now(), "创建一个文件") logFile.Close() t.Stop() //以下为定时执行的操作 initLogger() } } func searchHandler(w http.ResponseWriter, r *http.Request) { fileloger.Println(string(body)) w.Write([]byte(strconv.Itoa(runtime.NumGoroutine()))) } func main() { runtime.GOMAXPROCS(runtime.NumCPU()) go CreatLogger() http.HandleFunc("/search", searchHandler) log.Println("Server start listen on port:", 18080) err := http.ListenAndServe(":18080", nil) if err != nil { log.Fatal("ListenAndServe: ", err.Error()) } } ``` #### 日志如下: 2020/10/09 14:48:52 Server start listen on port: 18080 2020/10/09 23:59:57 2020-10-09 23:59:57.197181062 +0800 CST m=+33067.952413287 创建一个文件 2020/10/10 00:00:00 2020-10-10 00:00:00.00015083 +0800 CST m=+33070.755383073 创建一个文件 2020/10/10 23:59:52 2020-10-10 23:59:52.519040092 +0800 CST m=+119470.755332920 创建一个文件 2020/10/11 00:00:00 2020-10-11 00:00:00.000123355 +0800 CST m=+119478.236416191 创建一个文件 2020/10/11 23:59:58 2020-10-11 23:59:58.635823011 +0800 CST m=+205878.236415904 创建一个文件 2020/10/12 00:00:00 2020-10-12 00:00:00.000176828 +0800 CST m=+205879.600769738 创建一个文件

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1499 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传