Linux时区设置及NTP时间同步

  • Post author:
  • Post category:linux



文章搜集自:[url]http://publishblog.blogchina.com/blog/tb.b?diaryID=2745968[/url]


一、背景
机器装的是

busybox

,使用的是最小集合的

linux

。硬件时钟是本地时间,而内核时钟是

UTC

时间,没有设置时区,也没有任何时区设置的选项。

二、需求


这台机器需要定时进行

NTP

时间同步。同步之后显示给用户的是本地时间。

三、过程



1

.时区的支持


1



hwclock
为了查看硬件时钟是否为本地时间,运行命令

hwclock –r

。结果系统提示:“

Could not open RTC: No such file or directory

”,即找不到

RTC

文件。


2



/dev/rtc


由于内核在编译过程中没有提供

RTC

支持,需要重新编译内核(或为内核增加一个

module

)。方法为,在

make menuconfig

阶段,选中“

Character device

”的“

Enhanced Real Time Clock Support

”一项的支持。
为内核增加了该模块后,目录

/proc/drive/

下已出现了

rtc

文件,

cat

也能查看到正常的内容。但

/dev/

目录下仍没有

rtc

文件。
于是通过

mknod

命令在

/dev

目录下增加

rtc

文件。通过

man rtc

可以得知,

RTC

为只读字符设备,主

10

,从

135

。因此命令为“

mknod /dev/rtc c 10


135

”。命令执行完毕后,

/dev

下成功生成了

rtc

文件。
运行

hwclock –r

,能够看到硬件时间为本地时间。通过

date

命令查看系统时间,却为

UTC

时间。这说明系统没有进行本地时间的设置。


3



/etc/localtime

Linux

的系统时区是通过符号连接

/etc/localtime

来得到的。可以通过

tzset

命令来设置时区。如果没有该命令,可以通过命令“

ln –s /etc/localtime /usr/share/zoneinfo/Asia/Shanghai

”来将时区设置为亚洲的上海。
由于最初构建系统的时候没有包含

zoneinfo

信息,因此

/usr/share

目录下不存在

zoneinfo

目录及其文件。所以将包含

zoneinfo

信息的机器的

/usr/share

目录下的整个

zoneinfo

目录复制到本机的

/usr/share

目录下。
通过

date

命令检查时间,发现已变成了正常的本地时间:

Mon Aug 29 13:14:29 CST 2005


4



/etc/sysconfig/clock


该配置文件可用来设置用户选择何种方式显示时间。如果硬件时钟为本地时间,则

UTC

设为

0

,并且不用设置环境变量

TZ

。如果硬件时钟为

UTC

时间,则要设置

UTC



1

,并设置环境变量

TZ

(或配置文件

/etc/TZ

)为时区信息,如“

Asia/Shanghai

”。
我机器的硬件时间为本地时间,因此该配置文件内容为:

ZONE=”Asia/Shanghai”

UTC=0

ARC=0

2



NTP

同步设置


1



ntpdate
如果只是通过

NTP

服务器同步系统时间,可以使用命令

ntpdate

(位于

/usr/sbin/

下,使用

ntpd

会提供更佳全面的功能)。

Ntpdate

用到的库包括:

libcap.so.1 => /lib/libcap.so.1



libc.so.6 => /lib/tls/libc.so.6



/lib/ld-linux.so.2 (0xf6fdf000)

。将该命令文件及相关的库都复制到这台机器上,并找到一个最近的稳定的

NTP

服务器。我使用的是

nets.org.sg



IP



203.117.180.36

)。运行命令“

ntpdate 203.117.


180.36

”,再通过

date

命令查看时间,发现时间已更新。

四、相关知识




Linux



时钟

Linux

机器里有两个时钟,一个是硬件时钟(

CMOS

时钟),一个是内核时钟。硬件时钟是电池驱动的,通过专门的芯片工作。可以通过

BIOS

设置屏或一些系统命令(如

hwclock

)进行设置。内核时钟是由内核维护的,启动时从硬件读取时间,之后独立运行。


RTC





Real Time Clock








Linux

实时的时钟驱动,通常

它们被嵌在计算机的芯片中,也有一些是在主板上使用Motorola MC146818(或clone)实现的。该硬件设备可映射到/dev/rtc,供root编程访问。


NTP





Network time protocol







NTP

为一种网络时间协议,是一种确保网络上的主机调整时间的方法。很多地方都会提供

NTP

服务器(

ISP

或网管,也可以在

[url]http://www.eecis.udel.edu/~mills/ntp/clock[/url]1a.html

寻找一个最近的服务器)。

转载于:https://blog.51cto.com/liujia/121125


关闭菜单