23 FreeBSD连载:配置系统时间

配置系统时间对于网络操作系统来讲,由于要向多个客户提供服务,因此必须拥有一个精确的系统时间 。可以使用date命令来显示当前的时间:
$ date
1999年 4月10日 星期六 18时51分39秒 CSTdate命令按中文方式输出的前提是指定环境变量LC_ALL为zh_CN.EUC,这是用于本地化的一种标准方式 。
由于用于Internet上的网络操作系统的客户可能来自世界的不同地区,因此时间系统必须能标识出不同的时区 。计算机中的CMOS时间能设置为两种不同的时间,一种是将CMOS时间设置为格林威治标准时间,使用时区修正给出本地时区的正确时间,另一种方法是将CMOS时间设置为本地时区时间,再使用本地时区修正得到格林威治标准时间 。这样系统和其他计算机通信时就能使用标准时间,避免不同时区的计算机时间的差异 。
系统安装程序在进行时区设置时将询问用户使用那种时间设置方式及时区设置,系统安装完成之后,也可以直接使用tzsetup命令来设置时区信息 。所有的时区信息保存在/usr/share/zoneinfo目录中,而本机的时区设置信息保存在/etc/localtime文件中 。此外,每个用户也可以使用环境变量TZ来设置与系统不同的时区,这个设置将覆盖系统的设置 。
root用户可以使用带参数date来更改系统时间,例如以下命令将时间设置为1999年3月1日,下午1点54分 。
# date 9903011354
1999年 3月 1日 星期一 13时54分00秒 CST可以看出时间格式为年、月、日、时、分,每个各占两个数字,其形式即为yymmddhhmm,大部分情况下是对时间进行小调整,可以略去前面的年月日部分,而仅使用四位数字表示时、分,形如hhmm 。
通过Internet同步时间
手工设置时间一方面不方便,另一方面也依赖于本地管理员的时钟的正确性,那么网络上不同的管理员管理的计算机时间必然有偏差,不同计算机的时间偏差就会对一些要求时间同步的服务产生影响 。解决这种问题的方法很简单,连接到一个能提供精确时间的服务器上进行时间同步 。
当计算机连接到了Internet之后,那么就能同Internet上存在的很多时间服务器通信,以获得精确的时间 。TCP/IP协议中,用于同步时间的协议为ntp协议,在Internet上提供ntp服务的站点有clepsydra.dec.com 、ben.cs.wisc.edu、truechimer.waikato.ac.nz等,虽然ntp协议本身考虑了网络延迟,然而网络延迟毕竟会对时间的精确性造成影响,因此应该选用一个离本地计算机最近的时间服务器 。
使用/stand/sysinstall也能设定时间同步,可以根据地域来选择合适的时间服务器,然而由于网络连接并不一定和地域相一致,因此不能完全根据地域的远近来选择时间服务器 。
使用ntp协议更新自己计算机上的时间的一个简单的应用程序为ntpdate,同样这也需要使用root权限执行:
# ntpdate clepsydra.dec.com
10 Apr 19:26:49 ntpdate: step time server 204.123.2.5 offset 517.837146ntpdate运行过之后就退出了,为了保持时间的正确性,就要每隔一段时间自动进行时间同步,可以将ntpdate放入cron中,每隔一段时间就执行一次 。然而系统提供了另一个守护进程,xntpd,能够自动周期进行时间同步的工作,这更为适合与Internet有永久连接的计算机 。为了运行xntpd守护进程,首先要创建/etc/ntp.conf文件,其中应包括时间服务器的名字和一个临时文件名 。
serverclepsydra.dec.com
driftfile /etc/ntp.drift然后就需要运行这个守护进程,进行时间同步 。
# xntpd -c /etc/ntp.conf -p /var/run/xntpd.pid其中-c参数指定了ntp.conf作配置文件,用xntpd.pid记录xntpd的进程标识序号 。ntpdate和xntpd都可以通过更改rc.conf中的选项,在启动时自动执行 。

推荐阅读