From abda886de59b32d73fa2838ea41f6bf6b22f77a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E7=A5=A5=E8=B6=85?= Date: Sat, 27 Aug 2022 15:28:53 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A6=82=E6=9E=9C=E7=B3=BB=E7=BB=9F=E5=AE=89?= =?UTF-8?q?=E8=A3=85=E4=BA=86ntpdate=EF=BC=8C=E5=88=99=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=88=A9=E7=94=A8ntpdate=E5=90=8C=E6=AD=A5?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/nodes/node.go | 6 ++++ internal/utils/clock/utils.go | 57 +++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 internal/utils/clock/utils.go diff --git a/internal/nodes/node.go b/internal/nodes/node.go index 36a18f9..65d109f 100644 --- a/internal/nodes/node.go +++ b/internal/nodes/node.go @@ -22,6 +22,7 @@ import ( "github.com/TeaOSLab/EdgeNode/internal/stats" "github.com/TeaOSLab/EdgeNode/internal/trackers" "github.com/TeaOSLab/EdgeNode/internal/utils" + "github.com/TeaOSLab/EdgeNode/internal/utils/clock" "github.com/TeaOSLab/EdgeNode/internal/waf" "github.com/andybalholm/brotli" "github.com/iwind/TeaGo/Tea" @@ -164,6 +165,11 @@ func (this *Node) Start() { NewNodeStatusExecutor().Listen() }) + // 同步时间 + goman.New(func() { + clock.Start() + }) + // 读取配置 nodeConfig, err := nodeconfigs.SharedNodeConfig() if err != nil { diff --git a/internal/utils/clock/utils.go b/internal/utils/clock/utils.go new file mode 100644 index 0000000..f3f9cbb --- /dev/null +++ b/internal/utils/clock/utils.go @@ -0,0 +1,57 @@ +// Copyright 2022 Liuxiangchao iwind.liu@gmail.com. All rights reserved. Official site: https://goedge.cn . + +package clock + +import ( + "bytes" + "errors" + "github.com/TeaOSLab/EdgeNode/internal/remotelogs" + "os/exec" + "runtime" + "time" +) + +func Start() { + // sync once + err := Sync() + if err != nil { + remotelogs.Warn("CLOCK", "sync time clock failed: "+err.Error()) + } + + var ticker = time.NewTicker(1 * time.Hour) + for range ticker.C { + err := Sync() + if err != nil { + // ignore error + } + } +} + +// Sync 自动校对时间 +func Sync() error { + if runtime.GOOS != "linux" { + return nil + } + + ntpdate, err := exec.LookPath("ntpdate") + if err != nil { + return err + } + if len(ntpdate) > 0 { + return syncNtpdate(ntpdate) + } + + return nil +} + +func syncNtpdate(ntpdate string) error { + var cmd = exec.Command(ntpdate, "pool.ntp.org") + var stderr = &bytes.Buffer{} + cmd.Stderr = stderr + err := cmd.Run() + if err != nil { + return errors.New(err.Error() + ": " + stderr.String()) + } + + return nil +}