1. NTP配置方法

1.1 NTP常用命令


(1)

服务器,启动/关闭NTP服务命令:

/etc/init.d/ntpd {start|stop|restart|condrestart|status}


(2)

客户端,按照服务器的时间更新自己的时间。

/usr/sbin/ntpdate 192.168.0.101


可以使用“/bin/date”查看当前的时间。


查看当前机器与服务器的时间差的命令:

/usr/sbin/ntpdate -d 192.168.0.101


说明:目前使用“192.168.0.101”作为NTP服务器。


(3)

查看NTP状态的命令:

/usr/sbin/ntpq –p

或 /usr/bin/ntpstat


1.2 NTP配置


/etc/ntp.conf

//================================================================

# Permit time synchronization with our time source, but do not

# permit the source to query or modify the service on this system.

restrict default nomodify notrap noquery


# to sync

#restrict default ignore


# log file

logfile /var/log/ntp.log


# record different time between NTP server and NTP server of up-level to the file.

driftfile /var/lib/ntp/drift


# Key file containing the keys and key identifiers used when operating

# with symmetric key cryptography.

keys /etc/ntp/keys


# Prohibit inside loop

restrict 127.0.0.1


# Undisciplined Local Clock. This is a fake driver intended for backup

# and when no outside source of synchronized time is available.

# [SERVER CONF]

server    127.127.1.0    # local clock

# [CLIENT CONF]

#server    192.168.0.101 prefer # server-self ip

fudge    127.127.1.0 stratum 5    


# Be allowed to connect client ip,

# [SERVER CONF]

# Prohibit client ip, 192.168.0.1-192.168.0.254, to connect

restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap


# allow client ip to connect

restrict 192.168.0.200

restrict 192.168.0.201


//================================================================


1.3 crontab的使用方法


需要添加这个定时命令的客户端机器列表:

192.168.0.200

192.168.0.201


(1)

启动/关闭crontab服务命令:

/etc/init.d/crond {start|stop|status|reload|restart|condrestart}


(2)

root用户,创建 /root/crontab/updateTime.sh 文件,内容如下:

//================================================================

/bin/date >> /root/crontab/update.log

/usr/sbin/ntpdate 192.168.0.101 >> /root/crontab/update.log

//================================================================


使用:

chmod a+x /root/crontab/updateTime.sh

更改 /root/crontab/updateTime.sh 的运行权限。


执行:

/usr/bin/crontab –e

进行添加、编辑:

//================================================================

0 4 * * * /root/crontab/updateTime.sh

//================================================================

每天上午4:00执行一次 /root/crontab/updateTime.sh 脚本。


查看crontab运行情况的命令:

/usr/bin/crontab –l


可以通过/var/log/cron查看crontab运行信息。


2. LINUX NTP SERVER 的配置

2.1 NTP使用参考


在linux下,我们可以通过自带的NTP(Network Time Protocol)协议通过网络使自己的系统保持精确的时间。可用的公共时间服务器列表可以从下面的地址获取:

http://www.eecis.udel.edu/~mills/ntp/servers.html

什么是NTP?

NTP是用来使系统和一个精确的时间源保持时间同步的协议。建议大家在自己管理的网络中建立至少一台时间服务器来同步本地时间,这样可以使得在不同的系统上处理和收集日志和管理更加容易。

同样,也有很多免费的NTP客户端可供Windows使用,你可以用它们来同步你windows的系统时间。


下载和安装

本文介绍如何在RedHat9.0上安装时间服务器,如果想获得NTP的最新版本,你可以下载tar包自己编译,这里只介绍RPM方式安装的NTP服务软件。

RedHat9.0带的NTP版本是4.1.2,你可以用下面的命令查看是否已经安装了这个软件包:

# rpm -qa|grep ntp

chkfontpath-1.9.7-1

ntp-4.1.2-0.rc1.2

如果发现没有安装,请从光盘上安装这个软件。执行下面命令安装NTP的RPM包:

# rpm -ivh ntp-4.1.2-0.rc1.2.i386.rpm


/etc/ntp.conf

这是NTP的主要配置文件,里面设置了你用来同步时间的时间服务器的域名或者IP地址,下面是到互联网同步时间的最基本的配置:

首先定义我们喜欢的时间服务器:

server ntp.research.gov

server otherntp.research.gov

接下来,我们设置上面两台服务器的访问权限,在这个例子中我们不允许它们修改或者查询我们配置在Linux上的NTP服务器

restrict ntp.research.gov mask 255.255.255.255 nomodify notrap noquery

restrict otherntp.research.gov mask 255.255.255.255 nomodify notrap noquery

掩码255.255.255.255是用来限制远程NTP服务器的掩码地址。

接下来设置允许访问我们时间服务器的客户机地址,通常这些服务器都应该位于我们自己局域网内。请注意,配置中noquery已经去掉了:

restrict 192.168.0.0 mask 255.255.255.0 notrust nomodify notrap

在上例中,掩码地址扩展为255,因此从192.168.0.1-192.168.0.254的服务器都可以使用我们的NTP服务器来同步时间。

最后,也是最重要的是默认的限制配置要从你配置文件中删除,否则它将覆盖你所有的配置选项,你将发现如果不删除该配置,你的时间服务器将只能和自己通讯。如果ntp.conf中有以下一行,请将它注释:

# restrict default ignore

保存你的配置文件,然后对每个你在ntp.conf里配置的时间服务器执行2编查询命令:

# ntpdate ntp.research.gov

27 Jun 10:12:01 ntpdate[25475]: adjust time server ntp.research.gov offset -0.127154 sec

# ntpdate ntp.research.gov

27 Jun 10:12:06 ntpdate[25478]: adjust time server ntp.research.gov offset 0.010008 sec


使NTP进程自启动

为了使NTP服务可以在系统引导的时候自动启动,执行:

# chkconfig ntpd on

启动/关闭/重启NTP的命令是:

# /etc/init.d/ntpd start

# /etc/init.d/ntpd stop

# /etc/init.d/ntpd restart

切记每次修改了配置文件后都需要重新启动服务来使配置生效。可以使用下面的命令来检查NTP服务是否启动,你应该可以得到一个进程ID号:

# pgrep ntpd


检查时间服务器是否正确同步

使用下面的命令检查时间服务器同步的状态:

# ntpq -p

输出:

remote          refid       st t when poll reach  delay   offset   jitter

================================================================

-jj.cs.umb.edu   gandalf.sigmaso  3 u   95 1024  377  31.681  -18.549    1.572

milo.mcs.anl.go  ntp0.mcs.anl.go  2 u  818 1024  125  41.993  -15.264    1.392

-mailer1.psc.edu ntp1.usno.navy.  2 u  972 1024  377  38.206   19.589   28.028

-dr-zaius.cs.wis ben.cs.wisc.edu  2 u  502 1024  357  55.098    3.979    0.333

+taylor.cs.wisc. ben.cs.wisc.edu  2 u  454 1024  347  54.127    3.379    0.047

-ntp0.cis.strath harris.cc.strat  3 u  507 1024  377 115.274   -5.025    1.642

*clock.via.net   .GPS.            1 u  426 1024  377 107.424   -3.018    2.534

ntp1.conectiv.c  0.0.0.0         16 u    - 1024    0   0.000    0.000  4000.00


一个可以证明同步问题的证据是所有远程服务器的jitter值是4000并且delay和reach的值是0。

remote           refid      st t when poll reach   delay   offset  jitter

=================================================================

LOCAL(0)        LOCAL(0)        10 l    -   64    7    0.000    0.000   0.008

ntp-cup.externa 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00

snvl-smtp1.trim 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00

nist1.aol-ca.tr 0.0.0.0         16 u    -   64    0    0.000    0.000 4000.00

可能的原因有:

配置文件中的restrict default ignore没有被注释

有防火墙阻断了与server之间的通讯

此外每次重启NTP服务器之后大约要3-5分钟客户端才能与server建立正常的通讯连接,否则你执行ntpdate ip的时候将返回:

27 Jun 10:20:17 ntpdate[21920]: no server suitable for synchronization found


2.2关于NTP SERVER的配置说明

NTP server的安装

如果你的服务器是Linux,请先用如下指令查看本机是否已安装ntp server

rpm -qa|grep ntp

如无,则安装上此RPM包。

也可安装tar包。

配置NTP server

NTP server的主配置文件为/etc/ntp.conf

现对/etc/ntp.conf的各项进行说明


#设置此服务器同上层服务器做时间同步的IP地址,prefer意味着首选IP地址

server 61.246.176.141 prefer

server 210.59.157.10 prefer

server 202.112.7.150 prefer


server 203.116.5.254  #asia.pool.ntp.org

server 202.162.32.12  #1.asia.pool.ntp.org

server 202.155.248.212 #0.asia.pool.ntp.org

#记录上次我们的NTP server与上层NTP server连线时所花费的时间

driftfile /etc/ntp/drift

#设置默认策略为允许任何主机进行时间同步

restrict default ignore

#设置允许访问此时间服务器的时间服务的IP地址

restrict 127.0.0.1    # 开启内部环路lo

restrict 192.168.0.2  # 主机本身的 IP 也同时开启

restrict 211.101.48.56

restrict 192.168.1.0 mask 255.255.255.0 意味着允许192.168.1.0/24子网内主机可同步


restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap #允许任何主机跟此服务器进行时间同步

#指定阶层编号为5,降低其优先度。

fudge 127.127.1.1 stratum 5

#设置ntp日志的path

statsdir /var/log/ntp/

#设置ntp日志文件

logfile /var/log/ntp/ntp.log

keys /etc/ntp/keys


NTP server的维护

1、 启动

service ntpd start或者ntpd –p /var/log/ntpd.pid或手工指定配置文件的带path的全名

如ntpd –c /etc/ntp/ntp.conf –p /var/log/ntpd.pid

2、 停止

service ntpd stop

3、 ntpq –p  查看本机和上层服务器的时间同步结果

4、 ntptrace  可以用来追踪某台时间服务器的时间对应关系

5、 ntpdate IP 客户端要和NTP server进行时钟同步。

6、 查看ntp日志/var/log/ntp/ntp.log


客户端的配置

LINUX客户端:

echo “10 5 * * * root /usr/sbin/ntpdate 192.168.5.3;/sbin/hwclock -w”>>/etc/crontab

意为每天凌晨的5:10同NTP server进行一次时钟同步,并写入本机BIOS


2.3 LINUX客户端时间同步配置

一、在客户端测试是否可以同步

[root@ce ~]# ntpdate 192.168.16.105

31 May 15:58:50 ntpdate[24467]: adjust time server 192.168.16.105 offset 0.003085 sec31 May 15:58:50 ntpdate[24467]: adjust time server 192.168.16.105 offset 0.003085 sec


备注:

A、当执行同步的时候,发现提示:no server suitable for synchronization found

可以从以下几方面查原因:

1、    检查ntp时间服务器是否已经启动

2、    检查ntp时间服务器的ntp服务是否已经启动3-5分钟,如果还没有3-5分钟,请在3-5分钟之后重试

3、检查配置没问题了,还不能同步,于是检查防火墙,把防火墙清理掉加入:

iptables -A INPUT -p udp -j ACCEPT

B、Linux下ntp时间同步服务ntpd出现the NTP socket is in use,exiting解决

1、这是因为开启了ntpd服务,同一台服务器。不能同时启动ntpd服务,同时又利用ntpdate同步时间,,只能二选一


二、编写同步脚本

打开/etc/crontab文件,增加一行:

* 23 * * * root /usr/sbin/ntpdate 192.168.16.105 > /dev/null 2>&1


表示每天晚上11点同步数据

/dev/null 2>&1 这样的写法.这条命令的意思是将标准输出和错误输出全部重定向到/dev/null中,也就是将产生的所有信息丢弃.


名称 : crontab

使用权限 : root用户和crontab文件的所有者

语法 :

crontab [-e [UserName]|-l [UserName]|-r [UserName]|-v [UserName]|File ]

说明 :

crontab 是用来让使用者在固定时间或固定间隔执行程式之用,换句话说,也就是类似使用者的时程表。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。

参数 :

-e [UserName]: 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)

-r [UserName]: 删除目前的时程表

-l [UserName]: 列出目前的时程表

-v [UserName]:列出用户cron作业的状态

时程表的格式如下 :

f1 f2 f3 f4 f5 program

其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程式。

当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程式,其余类推

当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其余类推

当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其余类推

当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其余类推

使用者也可以将所有的设定先存放在档案 file 中,用 crontab file 的方式来设定时程表。

由于unix版本不一样,所以部分语法有差别,例如在hp unix aix 中设定间隔执行如果采用*/n 方式将出现语法错误,在这类unix中 ,间隔执行只能以列举方式,详请见例子。

使用方法:

用VI编辑一个文件 cronfile,然后在这个文件中输入格式良好的时程表。编辑完成后,保存并退出。

在命令行输入

$: crontab cronfile

这样就将cronfile文件提交给c r o n进程,同时,新创建cronfile的一个副本已经被放在/ v a r / s p o o l / c r o n目录中,文件名就是用户名。

例子 :

每月每天每小时的第 0 分钟执行一次 /bin/ls :

0 * * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点中,每隔 20 分钟执行一次 /usr/bin/backup :

*/20 6-12 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name :

0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata

每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha"

20 0-23/2 * * * echo "haha"

晚上11点到早上8点之间每两个小时,早上8点

0 23-7/2,8 * * * date

在hp unix,中,每20分钟执行一次,表示为:0,20,40 * * * * 而不能采用*/n方式,否则出现语法错误


2.4 NTPD对时效果检验及注意事项

1.    NTP对时效果检查

1)    保证待检查的主机与网络时间服务器(NTS)通讯正常(可用PING命令检查,例如两个网络时间服务器的IP地址是192.168.18.21与192.168.18.22)。

2)    在主机中打开一个DOS窗口,敲入ntpdc,在ntpdc>提示符后输入peers,将列出NTS的有关信息,对上例将列出IP地址192.168.18.21、192.168.18.22。若列出的IP地址不是上述的IP地址,则表明该主机有关NTS服务器配置文件有误,可以手动修改,用记事本打开c:\WINNT\ntp.conf与c:\WINNT\system32\drivers\etc\ntp.conf文件,将两个文件中两个server后的IP地址分别修改为192.168.18.21、192.168.18.22,保存后将主机重新启动。

3)    在ntpdc>提示符后输入peers后,若对时正常时其中应有一个IP地址的前面打*号,另一个IP地址前打=号,打*的IP地址表示该NTS正与本主机提供NTP对时服务。列表中offset表示主机与NTS的时间偏差,单位为秒。列表中poll列表示主机与NTS对时的时间间隔(时间为秒,最小64,最大1024,主机根据对时时间效果自动动态调整)。

4)    在ntpdc>提示符后输入showpeer 192.168.18.21(注意该IP地址应为上述打*的IP地址),将详细列出主机与该NTS之间的详细NTP信息。其中filter offset为最近几次的时间偏差,单位为秒。

5)    可以输入quit退出ntpdc交互进程。

6)    若在ntpdc>提示符后输入peers,显示“ntpdc: read: no error”,则表明NTP客户端程序ntpd不在运行。在“设置\控制面板\管理工具\服务”检查NetworkTimeProtocol服务是否被停止以及是否被禁用。在其属性中将其“启动类型”改为“自动”并启动之,然后再进行3)与4)的检查。

7)    若在DOS窗口中敲入ntpdc后提示“ntpdc不是内部或外部命令”,在表明NTP软件没有安装,按照下述2的步骤进行安装。

8)    注意:NTP对时在开机后需要一个过程才能完全与GPS对时并保持对时精度。该过程最慢需要15分钟左右,因此检验对时精度最好在开机15分钟之后再进行。

2.    NTP软件安装

1)    已安装有NTP软件,但其ntp.config文件中定义的NTS服务器的IP地址并非实际工程中使用的NTS地址,需要手动修改之,参照1中的2),将其改为实际使用IP地址。

2)    手动安装NTP软件的方法是将节约后的NTPD-2K目录复制到待安装的主机,然后在待安装主机该目录下执行NTP2K.COM。安装后需要重新启动主机。

3.    Ntpdc命令示意

 

    用ntpdc检查NTP对时效果,主要用peers与showpeer NTS IP。输入quit即可退出ntpdc。

Peers显示的结果当中,主要注意以下几项:

    Remote:显示ntp.config文件中定义的NTS服务器的IP地址,打*的IP地址表示该NTS正与本主机提供NTP对时服务。

    Local:本机IP地址,修改本机IP地址后应重启,其后方可正确显示此地址。

    St:NTP的层数:对于本工程,对本机提供NTP对时服务的NTS显示为1,不提供NTP对时服务的NTS或未连接的NTS为16。

    Poll:主机与NTS对时的时间间隔(时间为秒,最小64,最大1024,主机根据对时时间效果自动动态调整)。

    Offset:本机与NTS最近几次的平均偏差,单位为秒,正确对时后一般小于十几毫秒,有时也可能达几百毫秒。

showpeer显示的结果当中,主要注意以下几项:

    Filter offset:本机与NTS最近几次的偏差,单位为秒。

    Offset:本机与NTS最近几次的平均偏差,单位为秒。