FreeBSD連載(23):配置系統時間

1999年11月25日 12:44 王波

配置系統時間

  對於網路操作系統來講,由於要向多個客戶提供服務,因此必須擁有一個精確的系統時間。可以使用date命令來 顯示目前的時間:

$ date

1999年 4月10日 星期六 18時51分39秒 CST

  date命令按中文方式輸出的前提是指定環境變量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.837146

  ntpdate運行過之後就退出了,為了保持時間的正確性,就要每隔一段時間自動進行時間同步,可以將ntpdate 放入cron中,每隔一段時間就執行一次。然而系統提供了另一個守護進程,xntpd,能夠自動周期進行時間 同步的工作,這更為適合與Internet有永久連接的電腦。為了運行xntpd守護進程,首先要創建/etc/ntp.conf 檔案,其中應包括時間伺服器的名字和一個臨時檔案名。

server		clepsydra.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中的選項,在啟動時自動執行。

xntpd_enable="YES"      # Run xntpd Network Time Protocol (or NO).

xntpd_program="xntpd" # path to xntpd, if you want a different one.
xntpd_flags="-c /etc/ntp.conf -p /var/run/xntpd.pid" # Flags to xntpd (if enabled).

  如果要想讓本地網路上的多台電腦都進行時間同步,那麼每個電腦都與外部時間伺服器連接的方法並不是一個好 主意。更好的想法是使用一個電腦與外部時間伺服器同步,那麼它的時間就成為了標準時間,可以用作本地時間伺服器,而 其他電腦與這台本地時間伺服器同步就可以了。xntpd就是設計為這個目的,它能夠用作提供時間的ntp伺服器。用 作時間伺服器的xntpd的配置檔案應該為:

server		clepsydra.dec.com 

driftfile /etc/ntp.drift
broadcast 192.168.1.255

  其中增加了一項廣播地址:192.168.1.255,定期向局域網上的其他電腦廣播正確的時間。這個廣播 地址要根據自己的網路進行修改,或者使用對應於NTP協議的D類組播(multicast)網址224.0.1.1, 但用戶的網路必須支持組播能力。由於使用了廣播或組播,這樣網路內的其他電腦可以不配置ntp.conf,直接啟動 xntpd,xntpd就能通過聽伺服器的廣播信息來得到精確的時間。當然也可以不設定廣播地址,而配置每個電腦中 的ntp.conf檔案,指定所有的電腦都訪問這台時間伺服器。