一、前言

整个项目为封闭局域网,项目内客户端电脑将近五百余台,其中一部分电脑长期不使用造成BIOS电池片亏电,电脑使用时系统时间重置,局域网内调试开发的软件客户端系统时间需慢与服务器系统时间或与服务器系统时间一致,五百余台电脑挨个检查BIOS电池耗时太长且有些电脑只是临时使用,更换电池后长期不适用故障还会复现,决定搭建一个NTP服务。

二、电脑系统

服务器品牌:Huawei;

服务器系统:Windows Serve 2008;

客户机品牌:联想

客户机系统:Windows 7旗舰版 64bit。

三、服务器NTP搭建

搭建NTP很简单,这个网络上都有详细介绍:

1、设置2项注册表;

2、重启一下Windows time服务 并设置自动启动。

3.1、注册表设置

找到系统运行框,输入注册表命令“regedit”打开注册表,按下列路径:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\TimeProviders\NtpServer]

查找到“Enabled”设置项,基数为“十六进制”,数值数据设置为“1”,1的意思是启动。

ntp服务器说明书(Ntp服务器局域网搭建心得)(1)

我是Windows 10的注册表……

按路径:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\W32Time\Config]

查找“AnnounceFlags” 设置项,此设置项系统默认为10,我们需修改成“5”。(10 的意思是系统时间以主板BIOS为准,5是以外部时间源为准进行同步。)

基数为“十进制”,数值数据设置为“5”。

ntp服务器说明书(Ntp服务器局域网搭建心得)(2)

我还是windows10的注册表……

最后这项注册表设置的目的是,这台电脑两个网卡,其中一个网卡设置为链接互联网,用于时间校时使用,然后再以此服务器作为局域网时间服务器对下进行时间校准,实际测试可用。

系统时间校准功能默认为一周“604800”秒,Windows10我电脑默认为“32768”秒,各电脑内置晶振芯片频率略有差异,长期运行会造成时间不一致,软件要求时间较高的可以修改客户机上面的时间同步间隔。

ntp服务器说明书(Ntp服务器局域网搭建心得)(3)

Windows10注册表飘过~~~~

3.2、系统服务设置

找到系统运行框,输入注册表命令“services.msc”打开服务对话框。

ntp服务器说明书(Ntp服务器局域网搭建心得)(4)

Windows10运行对话框

在服务对话框中找到“Windows Time”,启动类型设置为“自动”,服务状态点“启动”。ntp时间服务器搭建完成。

ntp服务器说明书(Ntp服务器局域网搭建心得)(5)

Windows Time服务启动

3.3、NTP服务验证

服务器搭建完成后,验证一下是否可用,为方便后续调试制作了一个bat文件写了简单三行命令:

net stop w32time net start w32time w32tm /stripchart /computer:127.0.0.1

*运行需要管理员权限

ntp服务器说明书(Ntp服务器局域网搭建心得)(6)

NTP服务验证

四、客户机设置

客户机批量设置建议做一个批处理,并且设置开机启动,我把批处理添加到计划任务里面,每次开机自动设置一次并自动校准时间一次,这样设置的目的是BIOS电池亏电时时间校准功能可正常使用。

批处理:

reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers" /ve /t REG_SZ /d 1 /f reg add "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers" /v 1 /t REG_SZ /d xxx.xxx.xxx.xxx /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters" /v NtpServer /t REG_SZ /d xxx.xxx.xxx.xxx /f reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\TimeProviders\NtpClient" /v SpecialPollInterval /t REG_DWORD /d 1200 /f sc config w32time start=auto ping -n 3 127.0.0.1 > nul net stop w32time ping -n 3 127.0.0.1 > nul net start w32time ping -n 3 127.0.0.1 > nul w32tm /config /manualpeerlist:"xxx.xxx.xxx.xxx" /syncfromflags:manual /reliable:yes /update ping -n 3 127.0.0.1 > nul net stop w32time ping -n 3 127.0.0.1 > nul net start w32time ping -n 3 127.0.0.1 > nul net use \\xxx.xxx.xxx.xxx\ipc$ "NTP服务器实际登录用户密码" /user:NTP服务器实际登录用户名 ping -n 3 127.0.0.1 > nul net time \\xxx.xxx.xxx.xxx /set /y ping -n 3 127.0.0.1 > nul net time \\xxx.xxx.xxx.xxx /set /y ping -n 3 127.0.0.1 > nul net time \\xxx.xxx.xxx.xxx /set /y

*以上命令,请根据注释进行修改!

*注释:“xxx.xxx.xxx.xxx”为NTP服务器实际IP地址,IP地址前后均有空格。

*注释:“1200”为设置系统时间同步间隔20分钟,可根据实际需要自行修改。

*注释:在Windows 7系统上运行此批处理需要建立一个连接获取权限,否则后续运行会报错,无法进行时间校准。“net use”需NTP服务器上面不要关闭IPC$共享,系统默认为开启状态。

*注释:net time \\xxx.xxx.xxx.xxx /set /y意思是与NTP服务器进行时间校准并按校准时间对本机系统时间进行修改。

五、校准时间并加快

调试时需要一些服务器时间比客户机时间快一些,下面命令就是在获取NTP服务器时间后快10分钟,下面命令第14行“set /a min=%tim:~-8,2% 10”的“ 10”就是快10分钟。想按小时快就修改第13行%后面 数字,按秒快修改第15行。

还好外包的研发人员在后续给修改了此BUG,不过我还是分享出来,供有需要的网友使用。

//@echo off sc config w32time start=auto ping 127.0.0.1 -n 3 net stop w32time ping 127.0.0.1 -n 3 net start w32time ping 127.0.0.1 -n 3 net use \\xxx.xxx.xxx.xxx\ipc$ "NTP服务器实际登录用户密码" /user:NTP服务器实际登录用户名 ping 127.0.0.1 -n 3 net time \\xxx.xxx.xxx.xxx /set /y ping 127.0.0.1 -n 3 set tim=%time% set /a hour=%tim:~-11,2% set /a min=%tim:~-8,2% 10 set sec=%tim:~-5,5% if %min% geq 60 (set /a min=%min%-60&set /a hour=%hour% 1) if %hour% geq 24 (set /a hour=%hour%-24) @time=%hour%:%min%:%sec% echo %tim% echo %hour%:%min%:%sec%

,