mirror of
https://gitclone.com/github.com/MetaCubeX/Clash.Meta
synced 2025-02-23 00:33:27 +08:00
fix(ntp): simplify NTP service initialization and error handling
This commit is contained in:
parent
c34a0ef8f0
commit
460cc240b0
@ -47,8 +47,12 @@ func (srv *Service) Start() {
|
|||||||
srv.mu.Lock()
|
srv.mu.Lock()
|
||||||
defer srv.mu.Unlock()
|
defer srv.mu.Unlock()
|
||||||
log.Infoln("NTP service start, sync system time is %t", srv.syncSystemTime)
|
log.Infoln("NTP service start, sync system time is %t", srv.syncSystemTime)
|
||||||
|
err := srv.update()
|
||||||
|
if err != nil {
|
||||||
|
log.Errorln("Initialize NTP time failed: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
service.running = true
|
service.running = true
|
||||||
srv.update()
|
|
||||||
go srv.loopUpdate()
|
go srv.loopUpdate()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,20 +75,16 @@ func (srv *Service) Running() bool {
|
|||||||
return srv.running
|
return srv.running
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Service) update() {
|
func (srv *Service) update() error {
|
||||||
var response *ntp.Response
|
var response *ntp.Response
|
||||||
var err error
|
var err error
|
||||||
for i := 0; i < 3; i++ {
|
for i := 0; i < 3; i++ {
|
||||||
response, err = ntp.Exchange(context.Background(), srv.dialer, srv.server)
|
if response, err = ntp.Exchange(context.Background(), srv.dialer, srv.server); err == nil {
|
||||||
if err != nil {
|
break
|
||||||
if i == 2 {
|
}
|
||||||
log.Errorln("Initialize NTP time failed: %s", err)
|
if i == 2 {
|
||||||
return
|
return err
|
||||||
}
|
|
||||||
time.Sleep(time.Second * 2) // wait for 2 seconds before the next try
|
|
||||||
continue
|
|
||||||
}
|
}
|
||||||
break
|
|
||||||
}
|
}
|
||||||
offset = response.ClockOffset
|
offset = response.ClockOffset
|
||||||
if offset > time.Duration(0) {
|
if offset > time.Duration(0) {
|
||||||
@ -94,14 +94,15 @@ func (srv *Service) update() {
|
|||||||
}
|
}
|
||||||
if srv.syncSystemTime {
|
if srv.syncSystemTime {
|
||||||
timeNow := response.Time
|
timeNow := response.Time
|
||||||
err = setSystemTime(timeNow)
|
syncErr := setSystemTime(timeNow)
|
||||||
if err == nil {
|
if syncErr == nil {
|
||||||
log.Infoln("Sync system time success: %s", timeNow.Local().Format(ntp.TimeLayout))
|
log.Infoln("Sync system time success: %s", timeNow.Local().Format(ntp.TimeLayout))
|
||||||
} else {
|
} else {
|
||||||
log.Errorln("Write time to system: %s", err)
|
log.Errorln("Write time to system: %s", syncErr)
|
||||||
srv.syncSystemTime = false
|
srv.syncSystemTime = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (srv *Service) loopUpdate() {
|
func (srv *Service) loopUpdate() {
|
||||||
@ -111,7 +112,10 @@ func (srv *Service) loopUpdate() {
|
|||||||
return
|
return
|
||||||
case <-srv.ticker.C:
|
case <-srv.ticker.C:
|
||||||
}
|
}
|
||||||
srv.update()
|
err := srv.update()
|
||||||
|
if err != nil {
|
||||||
|
log.Warnln("Sync time failed: %s", err)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user