分享
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。
### 请大家帮忙看看一个定时器的问题,谢谢。
#### 问题描述:
在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
关注微信1695 次点击
添加一条新回复
(您需要 后才能回复 没有账号 ?)
- 请尽量让自己的回复能够对别人有帮助
- 支持 Markdown 格式, **粗体**、~~删除线~~、
`单行代码` - 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
- 图片支持拖拽、截图粘贴等方式上传