在项目中,有时候会发现服务器在每次重启后,时间会自动的变更,以至带来很多的麻烦。(例如日志记录混乱,OA系统登记信息错误等)导致这样的问题基本上有两个:
1)服务器硬件造成的,如电池电量不够;
2)系统问题,通常是因为时区错误。
要解决该问题,首先要知道的就是Linux系统中时间的概念:
1)Linux系统中,系统时间和硬件时间是独立的
系统时间是表示系统内运行的时间,硬件时间是指硬件设备中,如BIOS的时间。
2)系统时间和硬件时间的关系
系统时间由硬件时间和系统时区进行设置。系统在启动的时候,会从硬件设备中读取硬件时间,并根据系统时区进行修改,然后写入到系统时间内。同样,系统关闭时,也会读取系统时间,然后写入硬件时间。
由于硬件造成的问题,请联系硬件供应商。下面我们来谈谈系统上的解决方法:
1、涉及到的文件有:
/etc/sysconfig/clock--系统时间的配置文件
/etc/timezone--系统时区文件
以及一个目录:
/usr/share/zoneinfo--系统可使用的本地时间文件
2、使用到的命令
/bin/date--查看系统时间
/sbin/hwclock--查看硬件或系统时间,并可修改硬件时间
3、范例
让我们以一个实际例子为例:
系统:红旗 DC Server 5.0 for x86
通常,由于我们所在的时区是GMT +8(中国),所以,出现问题会发现这样的情况:
Tue Apr 25 19:31:00 CST 2006
# hwclock -r
Tue Apr 25 11:31:36 2006 -0.432139 seconds
也就是,系统时间比硬件时间增加了8小时。
首先,查看并修改时区配置:
Asia/Beijing
接下来,查看系统时间的配置文件
ZONE="Asia/Beijing"
UTC=false
ARC=false
要保证上述的Zone环境配置是对应的。然后修改本地时间文件:
# cp Beijing /etc/localtime
拷贝正确的本地时间文件(或链接)
最后,把硬件时间重新设置为系统时间,然后重新启动,以生效:
4、例外
在部分系统上,如AsinaUX 1.0。会由于系统本身采用的是UTC时间,若我们采用上述的方式修改系统时间,会发现这样的现象:
◎系统启动过程显示的localtime时间是正确的,但进入系统后,用date命令看到的时间恰好又多了8个小时
这样,我们就只能修改系统时间的配置文件,把UTC时间激活
ZONE=”Asia/Beijing”
UTC=true
ARC=false
# hwclock –hctosys
重启即可。
5、其他
常用的配置时间命令还有:
格式:date 月日时分年
(该设置和BSD上有所不同)
查看硬件时间
把系统时间写入硬件时间
就是把硬件时间写成系统时间
6、服务
最近发现,系统中的某些服务会对CPU频率进行调整,由此也会导致系统时间出现问题。典型的就是红旗DC 5.0上的cpuspeed服务,建议在某些情况下,可以把其关闭:
chkconfig cpuspeed off
※系统时间对于系统的稳定很重要,甚至会影响到HA等应用服务,一旦遇到问题,需要多分析问题的原因,直到解决为止!
※附:
UTC时间和GMT时间,这是一个很多天文爱好者争论不休的问题。我们不作深究。只要知道这样:
UTC 也就是 Coordinated Universal Time (协和标准时间),是利用这种 Atomic Clock 为基准所定义出来的正确时间。UTC标准时间是以 GMT 这个时区为主的。所以本地时间与 UTC 时间的时差就是本地时间与 GMT 时间的时差。
在Windows下使用红旗HA Cluster 配置工具
hwclock获取不到Bios时间导致的时间变更问题
红旗Asianux 3.0 安装 Oracle 9i
安装及配置红旗高可用服务器 HA 5.0 [5] – 使用WebManager
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/linux/113635.html