一、时区
1.格林尼治标准时间(GMT)
又称为格林威治标准时间(Greenwich Mean Time,GMT),是指位于英国伦敦郊区的皇家格林尼治天文台当地的标准时间,因为本初子午线被定义为通过那里的经线。
理论上来说,格林尼治标准时间的正午是指当太阳横穿格林尼治子午线时(也就是在格林尼治上空最高点时)的时间。但由于地球在它的椭圆轨道里的运动速度不均匀,这个时刻可能与实际的太阳时有误差,最大误差达16分钟。原因在于地球每天的自转是有些不规则的,而且正在缓慢减速,因此格林尼治时间基于天文观测本身的缺陷,已经不再被作为标准时间使用。现在的标准时间,是由原子钟报时的协调世界时(UTC)来决定。
2.协调世界时(UTC)
协调世界时(英语:Coordinated Universal Time,法语:Temps Universel Coordonné,简称UTC)是最主要的世界时间标准,其以原子时秒长为基础,在时刻上尽量接近于格林尼治标准时间。
协调世界时是最接近格林威治标准时间(GMT)的几个替代时间系统之一。对于大多数用途来说,UTC时间被认为能与GMT时间互换,但GMT时间已不再被科学界所确定。
3.时区
时区是地球上的区域使用同一个时间定义。以前,人们通过观察太阳的位置(时角)决定时间,这就使得不同经度的地方的时间有所不同(地方时)。1863年,首次使用时区的概念。时区通过设立一个区域的标准时间部分地解决了这个问题。
世界各个国家位于地球不同位置上,因此不同国家,特别是东西跨度大的国家日出、日落时间必定有所偏差。这些偏差就是所谓的时差。
世界时间(Universal Time)世界标准时间即UTC。
地方时间(本地时间,Local Time)由于处在不同的时区,本地时间一般与UTC是不同的,换算方法就是:本地时间 = UTC + 时区 或 UTC = 本地时间 – 时区
“北京时间” 和“Shanghai/Asia”时间是一样的,中国把“北京时间”作为标准时间,但是理论上来说,上海比北京更接近东经120度,所以上海时间才是最准确的时间
4.时区设置
- 使用tzselect 命令,有指引输入数字,根据最后的提示,把TZ=\'Asia/Shanghai\'; export TZ 加到 /etc/profile中,source /etc/profile,退出登陆再登陆,生效
- 直接修改文件:ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
二、硬件时间和系统时间
1.硬件时间
主板上BIOS中的时间,由主板电池供电来维持运行,系统开机时要读取这个时间,并根据它来设定系统时间(注意:系统启动时根据硬件时间设定系统时间的过程可能存在时区换算,这要视具体的系统及相关设置而定)。
- 查看硬件时间,使用hwclock 或hwclock -r:
[clouder@ana53 useful-sql]$ sudo hwclock
Sat 02 Feb 2019 04:18:09 PM CST -0.869820 seconds
- hwclock --localtime --debug
[clouder@ana53 useful-sql]$ sudo hwclock --localtime --debug
[sudo] password for clouder:
hwclock from util-linux 2.23.2
Using /dev interface to clock.
Assuming hardware clock is kept in local time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2019/02/02 08:17:03
Hw clock time : 2019/02/02 08:17:03 = 1549066623 seconds since 1969
Sat 02 Feb 2019 08:17:03 AM CST -0.125978 seconds
- hwclocl -u --debug
[clouder@ana53 useful-sql]$ sudo hwclock -u --debug
hwclock from util-linux 2.23.2
Using /dev interface to clock.
Assuming hardware clock is kept in UTC time.
Waiting for clock tick...
...got clock tick
Time read from Hardware Clock: 2019/02/02 08:18:47
Hw clock time : 2019/02/02 08:18:47 = 1549095527 seconds since 1969
Sat 02 Feb 2019 04:18:47 PM CST -0.251061 seconds
- 把硬件时间同步到系统时间,-s 等效于 --hctosys
[clouder@ana53 useful-sql]$ sudo hwclock -s
- 把系统时间同步到硬件时间,-w 等效于 --systohc
[clouder@ana53 useful-sql]$ sudo hwclock -w
- 检查BIOS存储的是UTC还是localtime,tail -1 /etc/adjtime :如果是UTC则表示存储的是UTC时区时间,如果是localitme则存储的是本地时区时间。
[clouder@ana53 useful-sql]$ tail -1 /etc/adjtime
UTC
2.系统时间
一般说来就是我们执行 date 命令看到的时间,linux系统下所有的时间调用(除了直接访问硬件时间的命令)都是使用的这个时间。
[root@ana53 app]# date
2018年 08月 09日 星期四 11:58:55 CST
由于直接输date,后面有个CST可能造成歧义,
中国标准时间:CST (China Standard Time )比世界协调时间早8小时
美国中部时间:Central Standard Time (USA) UTC-6:00
澳大利亚中部时间:Central Standard Time (Australia) UTC+9:30
古巴标准时间:Cuba Standard Time UTC-4:00
所以用date -R 使用REF-2822定义的标准信息输出:
[root@ana53 app]# date -R
Thu, 09 Aug 2018 11:58:56 +0800
3.时间同步
两种方法:ntpd服务或 ntpdate 命令+cron定时任务
使用ntpd服务,要好于ntpdate加cron的组合。因为,ntpdate同步时间,会造成时间的跳跃,对一些依赖时间的程序和服务会造成影响。比如sleep,timer等。而且,ntpd服务可以在修正时间的同时,修正cpu tick。理想的做法为,在开机的时候,使用ntpdate强制同步时间,在其他时候使用ntpd服务来同步时间。
要注意的是,ntpd有一个自我保护设置: 如果本机与上源时间相差太大, ntpd不运行. 所以新设置的时间服务器一定要先ntpdate从上源取得时间初值, 然后启动ntpd服务。ntpd服务运行后, 先是每64秒与上源服务器同步一次, 根据每次同步时测得的误差值经复杂计算逐步调整自己的时间, 随着误差减小, 逐步增加同步的间隔. 每次跳动, 都会重复这个调整的过程.
下面重点说说 /etc/ntp.conf文件的设置。在 NTP Server 的设定上面,其实最好不要对 Internet 无限制的开放,尽量仅提供您自己内部的 Client 端联机进行网络校时就好。此外, NTP Server 总也是需要网络上面较为准确的主机来自行更新自己的时间啊,所以在我们的 NTP Server 上面也要找一部最靠近自己的 Time Server 来进行自我校正。事实上, NTP 这个服务也是 Server/Client 的一种模式。
[root@linux ~]# vi /etc/ntp.conf
# 1. 关于权限设定部分
# 权限的设定主要以 restrict 这个参数来设定,主要的语法为:
# restrict IP mask netmask_IP parameter
# 其中 IP 可以是软件地址,也可以是 default ,default 就类似 0.0.0.0
# 至于paramter则有:
# ignore :关闭所有的 NTP 联机服务
# nomodify:表示 Client 端不能更改 Server 端的时间参数,不过,
# Client 端仍然可以透过 Server 端来进行网络校时。
# notrust:该 Client 除非通过认证,否则该 Client 来源将被视为不信任网域
# noquery:不提供 Client 端的时间查询
# notrap:不提供trap这个远程事件登入
# 如果paramter完全没有设定,那就表示该 IP (或网域)“没有任何限制”
restrict default nomodifynotrapnoquery # 关闭所有的 NTP 要求封包
restrict 127.0.0.1 #这是允许本级查询
restrict 192.168.0.1 mask 255.255.255.0 nomodify
#在192.168.0.1/24网段内的服务器就可以通过这台NTP Server进行时间同步了
# 2. 上层主机的设定
# 要设定上层主机主要以 server 这个参数来设定,语法为:
# server [IP|HOST Name] [prefer]
# Server 后面接的就是我们上层 Time Server 啰!而如果 Server 参数
# 后面加上perfer的话,那表示我们的 NTP 主机主要以该部主机来作为
# 时间校正的对应。另外,为了解决更新时间封包的传送延迟动作,
# 所以可以使用driftfile来规定我们的主机
# 在与 Time Server 沟通时所花费的时间,可以记录在driftfile
# 后面接的文件内,例如下面的范例中,我们的 NTP server 与
# cn.pool.ntp.org联机时所花费的时间会记录在 /etc/ntp/drift文件内
server 0.pool.ntp.org
server 1.pool.ntp.org
server 2.pool.ntp.org
server cn.pool.ntp.org prefer
#其他设置值,以系统默认值即可
server
fudge
driftfile /var/lib/ntp/drift
broadcastdelay
keys /etc/ntp/keys
总结一下,restrict用来设置访问权限,server用来设置上层时间服务器,driftfile用来设置保存漂移时间的文件。
以上引自:http://blog.sina.com.cn/s/blog_636a55070101u1mg.html
client和server的时间同步有两种情况:时间跳变(time step)和渐变(time slew)
跳变是指在client和server间时间差过大时(默认128ms),瞬间调整client端的系统时间
渐变是指时间差较小时,通过改变client端的时钟频率,进而改变client端中“1秒”的“真实时间”,保持client端时间连续性。举个例子,如果client端比server端慢10s,通过ntpd,client端的中每1秒现实时间是1.0005秒!虽然client端的时间仍然是1秒1秒增加的,通过调整每秒的实际时间,直到与serrver的时间相同。在这个例子中,10s/0.0005s=20000s,20000s/60/60=5.55555小时,即需要5个多小时才能消除10s的误差。在linux中,很多应用软件依赖系统的时间连续性来正确工作,系统时间的跳变将导致软件出现意想不到的问题,所以时间渐变才是ntpd的主要应用场景。
以上引自:https://blog.csdn.net/judwenwen2009/article/details/51661239
三、实现Internet时间同步(这里可以忽略上面两步)
方法1. 开机的时候自动网络校时:
vi /etc/rc.d/rc.local
/usr/sbin/ntpdate -u 192.168.0.2 192.168.0.3 192.168.0.4; /sbin/hwclock -w
方法2. 设定计划任务
crontab格式如下:
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
设定crontab计划任务也有两种方式:
- 1.写在/etc/crontab里
代码:
00 11 * * * root ntpdate 210.72.145.44
每天11点与中国国家授时中心同步时间
每天11点与中国国家授时中心同步时间
当然前提是
apt-get install ntpdate
代码也可是
00 11 * * * root ntpdate us.pool.ntp.org
- 2.使用命令crontab -e
crontab -e
10 5 * * * root ntpdate us.pool.ntp.org;hwclock -w
这样每天5:10自动进行网络校时,并同时更新BIOS的时间
ntp常见错误:
http://www.cnblogs.com/liuyou/archive/2012/07/29/2614341.html