@@ -765,23 +765,42 @@ func (s *ServerHandler) ReportSystemInfo(c context.Context, r *pb.Host) (*pb.Rec
765765 defer singleton .ServerLock .RUnlock ()
766766
767767 // 检查并更新DDNS
768- if singleton .ServerList [clientID ].EnableDDNS && host .IP != "" &&
769- (singleton .ServerList [clientID ].Host == nil || singleton .ServerList [clientID ].Host .IP != host .IP ) {
770- ipv4 , ipv6 , _ := utils .SplitIPAddr (host .IP )
771- providers , err := singleton .GetDDNSProvidersFromProfilesWithServer (
772- singleton .ServerList [clientID ].DDNSProfiles ,
773- & ddns.IP {Ipv4Addr : ipv4 , Ipv6Addr : ipv6 },
774- singleton .ServerList [clientID ].Name ,
775- clientID ,
776- )
777- if err == nil {
778- for _ , provider := range providers {
779- go func (provider * ddns.Provider ) {
780- provider .UpdateDomain (context .Background ())
781- }(provider )
782- }
768+ server := singleton .ServerList [clientID ]
769+ if server .EnableDDNS {
770+ if host .IP == "" {
771+ log .Printf ("服务器 %s (ID:%d) DDNS已启用但IP为空,跳过更新" , server .Name , clientID )
772+ } else if len (server .DDNSProfiles ) == 0 {
773+ log .Printf ("服务器 %s (ID:%d) DDNS已启用但未配置DDNS配置文件" , server .Name , clientID )
774+ } else if server .Host != nil && server .Host .IP == host .IP {
775+ // IP 没有变化,跳过更新(但不记录日志,避免频繁输出)
783776 } else {
784- log .Printf ("获取DDNS配置时发生错误: %v" , err )
777+ // IP 发生变化或首次设置,触发 DDNS 更新
778+ ipv4 , ipv6 , _ := utils .SplitIPAddr (host .IP )
779+ providers , err := singleton .GetDDNSProvidersFromProfilesWithServer (
780+ server .DDNSProfiles ,
781+ & ddns.IP {Ipv4Addr : ipv4 , Ipv6Addr : ipv6 },
782+ server .Name ,
783+ clientID ,
784+ )
785+ if err == nil {
786+ log .Printf ("服务器 %s (ID:%d) IP变化 (%s -> %s),触发DDNS更新,配置数量: %d" ,
787+ server .Name , clientID ,
788+ func () string {
789+ if server .Host != nil {
790+ return server .Host .IP
791+ } else {
792+ return "无"
793+ }
794+ }(),
795+ host .IP , len (providers ))
796+ for _ , provider := range providers {
797+ go func (provider * ddns.Provider ) {
798+ provider .UpdateDomain (context .Background ())
799+ }(provider )
800+ }
801+ } else {
802+ log .Printf ("服务器 %s (ID:%d) 获取DDNS配置时发生错误: %v" , server .Name , clientID , err )
803+ }
785804 }
786805 }
787806
0 commit comments