linux时钟概述(https://blog.csdn.net/yuki5233/article/details/82220078)
linux系统有两个时钟:一个是硬件时钟,即BIOS时间;另一个是系统时钟,是linux系统Kernel(内核)时间。
在linux系统上程序运行时读取的时间都是系统Kernel(内核)时间。Linux 内核保存为自 UTC 时间 1970 年1月1日经过的秒数
每次Linux启动时,系统Kernel(内核)会先去读取硬件时钟的设置(但是此时的硬件时间不一定是准确的),然后系统时钟就会独立于硬件继续运作。
综上所述,所以想要永久修改linux时间并使得时间准确,就需要永久修改硬件时间,不然每次重新启动linux时,系统时间又变回之前的硬件时间。
Linux时钟分为系统时钟(System Clock)和硬件(Real Time Clock,简称RTC)时钟。系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中进行设置。当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。
Linux中的所有命令(包括函数)都是采用的系统时钟设置。如果系统内核突然崩溃,然后直接按电源重启,则系统没有进行 系统时间到硬件时钟的 同步;但是 系统启动时,又根据 /etc/sysconfig/clock 中UTC的参数,来同步硬件时钟到系统,这时就会出现时间问题:
0)假设系统的时区为CST(UTC+8);
1)假设原 /etc/sysconfig/clock 中 UTC=true,修改成 UTC=false;
2)如果此时系统未正常关机,系统时间未按参数 UTC=false 同步时间到硬件时钟(没有+8小时);
3)但系统被按电源重启后,系统读取到 UTC=false,认为硬件时钟为CST时间,直接用于系统时间;
4)那么此时,系统时间将少了8小时。
查看时区
[root@localhost ~]# date -R; cat /etc/sysconfig/clock
Thu, 28 Sep 2017 00:31:54 +0800
ZONE="Asia/Shanghai"
##我们国家的东八区(+0800)
查看系统时间
[root@localhost ~]# date
Thu Aug 30 10:05:59 CST 2018
查看硬件时间
[root@localhost ~]# hwclock --show
或者
[root@localhost ~]# clock --show
Thu 30 Aug 2018 11:06:34 AM CST -0.360419 seconds
综上可以看出:系统时间和硬件时间并不一致,其实系统时间才是准确的。
在CentOS Linux中终端命令中执行以下命令:
1、vi /etc/sysconfig/clock #编辑时间配置文件
ZONE="Asia/Shanghai"
UTC=false #设置为false,硬件时钟不于utc时间一致
ARC=false
2、ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime #linux的时区设置为上海时区
3、ntpdate 192.43.244.18 #对准时间
如果没有安装ntp服务器,刚需要先执行以下命令:
yum install ntp #安装ntp服务器
4、/sbin/hwclock --systohc #设置硬件时间和系统时间一致并校准