Linux时间服务(ntp和chrony)

image-20220531084103957

目录

文章目录

本节实践

  1. 实践:Centos7 时间服务器搭建(ntp服务方式)(测试成功)-2022.5.31
  2. 实践:Centos7 时间服务器搭建(chrony服务方式)(测试成功)-2022.5.31

1、Centos7 时间服务器搭建(ntp服务方式)

💘 实践:Centos7 时间服务器搭建(ntp服务方式)(测试成功)-2022.5.31
img

前言

Linux的两种时钟
(1)系统时钟(System Clock)由Linux内核通过CPU的工作频率进行的
(2)硬件时钟(RealTime Clock,简称RTC):主板

注意:系统时间是基于内存的,断电就会丢失;硬件时间是写在硬件中的bios程序里的

系统时钟是指当前Linux Kernel中的时钟,而硬件时钟则是主板上由电池供电的时钟,这个硬件时钟可以在BIOS中的“Standard BIOS Feture”选项进行设置。

当Linux启动时,硬件时钟会去读取系统时钟的设置,然后系统时钟就会独立于硬件运作。因此系统时钟和硬件时钟可以采用异步方式即系统时间和硬件时间可以不同。从linux启动过程来看,系统时钟和硬件时钟不会发生冲突但linux中的所有命令都是采用的系统时钟设置

1.标准时间

说到时间,我们先来了解一下标准时间的概念及演变。

早期,标准时间采用的是格林尼治时间,即GMT,也称为世界时。它是指英国伦敦格林尼治天文台的标准时间,是以地球自转为基础,根据太阳横穿格**林尼治本初子午线(即0度经线)**来确定标准时间,用天来定义秒的计量系统,是基于天文学的由于地球自转速度不均匀,并且正在缓慢减速,因此,在GMT下,每天的一秒在微观尺度上和其它天的都不相同,不是一种均匀的时间系统

基于某些元素的原子能级跃迁频率有极高的稳定性这一特点,1967年国际度量衡大会对秒重新进行了定义:铯133元素的两个超精细能阶之间跃迁时所辐射的电磁波的周期的9,192,631,770倍的时间定义为一秒。在此基础上,1971年由国际时间局建立了国际原子时(TAI),并取1958年1月1日0时0分0秒世界时的瞬间作为同年同月同日0时0分0秒TAI。因此,TAI是基于物理学,为一种极其精确的时间系统,是用秒来定义天。

为解决TAI和GMT之间的时间误差,协调世界时于1972年面世。协调世界时,又称世界标准时间、国际协调时间,简称UTC。以TAI秒长为基础,当GMT与TAI之间时刻相差超过0.9秒时,通过在当年的6月30日或12月31日的最后时刻增减1秒进行修正,在时刻上尽量接近GMT。这就是闰秒。自1972年以来,一共进行了27次闰秒调整,都是正闰秒,即增加一秒

闰秒在当今存在一些争议。一些国家(如美国、法国、日本)认为应该直接使用TAI,不需要闰秒。因为要让世界各国在同一个瞬间增加一个闰秒,绝非易事。稍有疏忽,很多重要系统就会因时间误差而导致混乱。而且,基于闰秒出现的无规律性和不可预知性要在设备上预留“置闰”设置也非常麻烦。总而言之,闰秒会让全世界付出更多的许多人力财力成本。而另一些国家(如中国、英国、俄罗斯)则认为,在地球越转越慢的现实之中,五千年后的人类将发现,“日居正中”将是下午1时。“作为科技进步的产物,全面采用原子时,意味着人们可以完全摆脱地球自转与日月更替,孤独地奔跑在向前的路上。”,因此需要用闰秒进行修正。就最近国际电信联盟的投票结679C而言,闰秒得以保留,UTC依然作为公认的国际标准时间

2.网络时间(NTP)协议

NTP(Network Time Protocol) 网络时间协议,工作在UDP的123端口上。是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间校正(局域网上与标准间差小于1毫秒,互联网上几十毫秒)且可介由加密确认的方式来防止恶毒的协议攻击

image-20220601083647715

既然确定了UTC作为公认的国际标准时间。那如何保证时间的统一性和准确性,是按照A这台计算机的时间,还是按照B这台计算机的时间?这就需要用到网络时间协议,英文名称为Network Time Protocol ,简称NTP。通过该协议,可以把计算机的时钟同步到UTC,其精度在局域网内可达0.1ms,在互联网上绝大多数的地方其精度可以达到1-50ms

在NTP中,时间按照服务器的等级传播,Stratum-1(我们一般称作一级服务器)为最高层,其时间源为标准UTC,该时间源可以来自外部,如北斗、GPS也可以来自该服务器内部的原子钟。而**Stratum-2(二级服务器)**则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数最多不超过15层为防止单点故障,每一级服务器都应该有多台,且数量一般为奇数,以便于下级服务器决策。

在NTP协议中,下级服务器在指定的轮询时间范围(如64秒至1024秒)内,向上一级服务器通过UDP123端口发送报文,进行探测,根据多次的探测结果进行时间校准。在默认配置下,时差在128ms以内,会分成多步慢慢调整时差在128ms至1000ms,时间会一次性调整到位;**时差超过1000ms,NTP会判定为当前环境不可靠,而中止运行。**有些系统支持对以上参数进行调整,但有些系统则不可以。

正如之前所提到的,在对时间精确度要求很高的环境下进行闰秒的调整绝非易事其最主要的原则就是不能发生时间跳变。在一个复杂网络环境中,不是所有的系统或设备都能支持参数调整,也就是说在向上级服务器探测时间时,时差不能超过128ms。所以闰秒调整需分多步进行,以保证每一级服务时间差不超过128ms。受到网络传输延时的影响,在广域网内,越远端的服务器(如Stratum-15)的时间波动越明显,因此,在确认闰秒分步调整时,需要考虑这方面的因素,合理确定分步范围。根据笔者最近两次的调整经验,在3层服务器架构中,一次闰秒调整需分13次至15次完成。

NTP有足够的容错性,除之前提到的1000ms中止运行外,还能根据算法,选用可靠的上一级服务器。当无法正确获得上一级服务器时间时,NTP将使用自身的时间设备(普通设备一般为晶振,一级服务器一般为原子钟)提供服务。

3.NTP服务器

NTP服务器提供准确时间,首先要有准确的时间来源,这一时间应该是国际标准时间UTC。NTP获得UTC的时间来源可以是原子钟、天文台、卫星也可以从Internet上获取。这样就有了准确而可靠的时间源。时间按NTP服务器的等级传播。按照离外部UTC 源的远近将所有服务器归入不同的Stratum(层)中。Stratum-1在顶层,有外部UTC接入,而Stratum-2则从Stratum-1获取时间,Stratum-3从Stratum-2获取时间,以此类推,但Stratum层的总数限制在15以内。所有这些服务器在逻辑上形成阶梯式的架构相互连接,而Stratum-1的时间服务器是整个系统的基础。

计算机主机一般同多个时间服务器连接, 利用统计学的算法过滤来自不同服务器的时间,以选择最佳的路径和来源来校正主机时间即使主机在长时间无法与某一时间服务器相联系的情况下,NTP服务依然有效运转。为防止对时间服务器的恶意破坏,NTP使用了识别(Authentication)机制,检查来对时的信息是否是真正来自所宣称的服务器并检查资料的返回路径,以提供对抗干扰的保护机制。

4.NTP校时方式

时间服务器可以利用以下三种方式与其他服务器对时:broadcast/multicast,client/server和Symmetric

(1)broadcast/multicast:方式主要适用于局域网的环境,时间服务器周期性的以广播的方式,将时间信息传送给其他网路中的时间服务器,其时间仅会有少许的延迟,而且配置非常的简单。但是此方式的精确度并不高,对时间精确度要求不是很高的情况下可以采用。

(2)Symmetric:的方式得一台服务器可以从远端时间服务器获取时钟,如果需要也可提供时间信息给远端的时间服务器此一方式适用于配置冗余的时间服务器,可以提供更高的精确度给主机。

(3)client/server:方式与symmetric方式比较相似,只是不提供给其他时间服务器时间信息,此方式适用于一台时间服务器接收上层时间服务器的时间信息,并提供时间信息给下层的用户。

上述三种方式,时间信息的传输都使用UDP协议。时间服务器利用一个过滤演算法,及先前八个校时资料计算出时间参考值,判断后续校时包的精确性,一个相对较高的离散程度,表示一个对时资料的可信度比较低仅从一个时间服务器获得校时信息,不能校正通讯过程所造成的时间偏差,而同时与许多时间服务器通信校时,就可利用过滤算法找出相对较可靠的时间来源,然后采用它的时间来校时。

1.ntp服务器配置

  • 安装并配置ntp时间服务器

NTP在Linux主机上默认一般都是安装过的,只是服务没有启用。如果没有安装可直接使用yum install ntp命令即可。

NTP的主配置文件,以下是NTP服务器可选的指令:

//特别注意:以下配置文件是服务器端即ntp时间服务器的配置方法,这里csdn文章只作为配置参考,工作中并没有亲自配置过。

vim /etc/ntp.conf

# 允许172.16.*.*的IP使用该时间服务器;
restrict 172.16.0.0 mask 255.255.0.0 nomodify

#允许任何人来同步;
restrict default nomodify notrap

# 屏蔽其他IP过来更新时间;
restrict 0.0.0.0 mask 0.0.0.0 nomodify notrap noquery notrust 
#ignore:关闭所有的NTP联机服务;
#nomodify:表示Client端不能更改Server端的时间参数;不过Client端仍然可以透过Server端来进行网络校时;
#notrust:该Client除非通过认证否则该Client来源将被视为不信任网域;
#noquery:不提供Client端的时间查询;
#notrap:允许任何人来查询;

# 同步的上层服务器(210.72.145.44国家时间服务器),NTP服务器默认也有同步的时间服务器;
server 210.72.145.44

# 同步本地时间;
server 127.127.1.0 prefer

# 本地服务器的stratum大小不能超过16;
fudge 127.127.1.0 stratum 8

# 将时间同步到硬件时钟
SYNC_HWCLOCK=yes
  • 启动NTP服务器
systemctl enable ntpd
systemctl start ntpd
  • 查看NTP信息

1.查看NTP状态:ntpq -p (注意,客户端上也是可以用这个命令的)

可以使用ntpq –p查看ntp状态。正常情况下:remote列的各个服务器前, 应该有一个*,其它为+

img

注意:本次这个时间是与阿里云源同步的;

img

注意:NTP服务器配置完成启动之后,NTP自身或者与其server的同步需要一个时间段这个过程可能是5-10分钟,在这个时间段内客户端运行ntpdate命令时会产生no serversuitable for synchronization found的错误。

输出说明如下:

remote: 对应的NTP服务器,服务器名字前的符号含义如下:

*:选定的时间服务器
+: 处于候选状态的服务器
#: 选定的时间服务器,但距离超过最大值(这句话不太容易理解,但就经验判断,一般是上级之上的服务器存在问题)。
空格:该服务器不可用,原因为未能同步(可能是刚启动还未同步,也有可能是其它原因)。
-: 该服务器不可用。被集群算法所放弃。
x: 该服务器不可用。被交集算法所放弃。

refid: 对应的NTP服务器的上一级NTP服务器。

st: 对应的NTP服务器所在的Stratum(即服务器级别,1为第一级,2为第二级,以此类推)

t:……

when: 上一次探测ntp服务器到现在的时间(默认单位为秒,如果时间较长,会出现m、h,分别代表分钟和小时)

poll: 探测ntp服务器的轮询时间,单位为秒。

reach:为8进制,转换为二进制后,代表最近8次探测ntp服务器的状态。失败为0,成功为1。

delay:与ntp服务器的网络时延,单位为毫秒。

offset:与NTP服务器的时间(协议值)偏差,单位为毫秒。本机时间+offset=NTP服务器时间

jitter:有的版本为disp。多数情况下为最近两次有变化的offset差的绝对值。

2.查看实时时间偏差:ntpdate -q 对方ip (注意,客户端上也是可以用这个命令的)

正常输出如下:

server 192.168.11.33, stratum 2, offset 0.000843, delay 0.02579
24 Jan 20:09:19 ntpdate[10420968]: adjust time server 192.168.11.33 offset 0.000843

offset的值即为实时偏差值,单位为s。

如果显示如下:

server 192.168.11.44, ***\*stratum 0, offset 0.000000, delay 0.00000
24 Jan 20:11:26 ntpdate[15139008]: no server suitable for synchronization found

则说明无法从上级服务器获得时间信息,产生原因有可能是网络不通,也有可能是上级服务器未开启ntp服务。

  • 将时间同步到硬件时钟

[root@centos77-test ~]#vim /etc/ntp.conf

SYNC_HWCLOCK=yes # 添加如下内容到此配置文件中去。

2.ntp客户端配置

注意:一般客户端建议的配置做法如下

1、确保服务器安装了ntp服务:

yum install -y ntp

systemctl enable ntpd
systemctl start ntpd 

2、配置ntp配置文件

本人在工作中常用到的配置如下:

vim /etc/ntp.conf

注释上面4个server行,添加如下2个ntp时间服务器ip,然后重启ntpd服务即可。

server 主时间服务器 preferserver

从时间服务器server 从时间服务器

img

3、与服务器端同步时间

注意,一般工作中,没用到下面这些脚本,是从配置openstack中Get到的方法,可以作为参考。

ntpdate 172.16.16.1 # 注意,这个ip就是ntp时间服务器的ip

需要注意的是,这个命令将一次性把时间同步到位,会产生时间的跳变,需确定无影响后再执行。

//写到脚本中去。
crontab -e
*/10 * * * * /usr/sbin/ntpdate time1.aliyun.com && hwclock -w

# */10 * * * * /usr/sbin/ntpdate ntp时间服务器ip && hwclock -w 

4、查看ntp服务状态

systemctl status ntpd 
ntpq -p 
ntpdate -q ip  

测试结束😘

2、Centos7时间服务器搭建(chrony服务方式)

💘 实践:Centos7 时间服务器搭建(chrony服务方式)(测试成功)-2022.5.31

前言

Chrony是一个开源的自由软件,它能保持系统时钟与时钟服务器(NTP)同步,让时间保持精确。它由两个程序组成:chronyd和chronyc

chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。

chronyc 提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作

配置文件:Chrony启动时,它会读取/etc/chrony.conf配置文件中的设置。

1、服务端时间同步配置

服务端安装chrony:

[root@localhost ~]# yum install chrony –y  #安装chrony

服务端配置chrony主机: cat /etc/chrony.conf
备注:以下配置内容为csdn博客当时配置的信息,具体内容视情况而定。

image-20210422104441906

设置开机自启:
#systemctl start  chronyd
#systemctl status chronyd --查看chronyd服务状态
#systemctl enable chronyd --开机启动

查看时间同步源:

# chronyc sources -v

image-20210422104504783

2、客户端时间同步配置

客户端安装chrony
[root@localhost ~]# yum install chrony –y

客户端配置文件:
cat  /etc/chrony.conf

image-20210422104530888

客户端启动服务:
#systemctl start  chronyd
#systemctl status chronyd --查看chronyd服务状态
#systemctl enable chronyd --开机启动

查看时间同步源:

# chronyc sources -v 

image-20210422104549694

* 符号就代表客户端已经正常与时间服务器进行时间同步。

image-20210422104623380

引用

csdn:https://blog.csdn.net/genglei1022/article/details/77833406

3、chrony和ntpd精度对比测试

一般搭建NTP时间服务器的搭建有2种方式:

\1. 利用ntp服务搭建;

\2. 利用chrony服务搭建;

尽量优先使用chrony配置时间同步(较好适配centOS7及以上版本)。并且,常规的ntp服务可能会涉及一些系统相关信息,不安全。

img

1. chrony和ntpd精度对比测试

Redhat从RHEL 7.0开始使用chrony替换ntpd作为默认的ntp同步工具。从chrony的官方网站上可以看到与ntpd各维度详细对比:

imgimg

在测试之前,从理论上说chrony的主要优点在于:

\1. 支持Hardware timestamping,时间戳会更加准确,因为从网卡到内核之间的延迟可能有几十us。

\2. 支持xleave,可以提升对网络延迟的测量精度。

为了评估内部是否需要使用chrony来替换ntpd,我自己也做了一些测试。主要是从集群的延迟稳定性和时钟偏差2个维度来衡量。

测试集群选择三个城市的多个机房内服务器做测试。

1.chrony的延迟稳定性

img

2.ntpd延迟稳定性

img****

3.chrony时钟稳定性

img

4.ntpd的时钟稳定性

img

从上面的4个图可以看到,实际上NTPD的同步稳定性相对比较好一些。NTP协议本身精度的瓶颈是在于网络延迟稳定性,NTPD在这一块有大量的算法保证:

\1. Clock Filter Algorithm (huff-n’-puff filter)

\2. Clock Select Algorithm

\3. Clock Cluster Algorithm:

\4. Clock Discipline Algorithm:

整体的流程如下:

img

正因为NTP的设计者一开始就考虑的非常全面,使得目前NTP的授时精度早已经达到理论瓶颈。广域网的授时精度要想稳定性&精度超越ntpd,几乎不太可能(PTP只能用户局域网),因此短期内我还是会继续选择NTPD作为时钟同步软件。

对于NTP这种古老的协议,目前还有人愿意投入精力去改进实际是非常难能可贵的,真心希望chrony能早日从稳定性&精度两个方面超越ntpd。

参考链接:https://chrony.tuxfamily.org/comparison.html

引用:https://blog.gnuers.org/?p=1483

2. 关于时间服务(ntpd、chrony)的应用场景

一般来说在中大型的网络环境中时间服务器基本上来说是必须的,在内网中建立一台时间服务器,其他的服务器都来此服务器同步时间。 像虚拟机如果关机或者是被暂停了之后再开机的时候时间还是原来的时间,这个时候就需要从新同步时间。如果时间不对可能对业务环境有影响。 比如说像一些分布式系统集群等相互协调工作的应用都需要时间同步服务来确保每个服务器的时间是一致的。 ntpd、chrony这两款时间管理服务应该怎样选型呢?centos7.4之前的系统默认是提供的ntpd来作为时间管理服务的,之后就是chrony。其实两个都差不多,看个人喜好。

4、Linux时间服务相关命令

image-20220530213030473

1、显示与设定系统时钟:date命令

date命令使用“+”来传递参数。常用参数如下:
1.显示系统时间
📍 例子:显示系统时间:date;hwclock;clock
[root@gitlab-runner ~]#date
Wed May 18 07:23:01 CST 2022
[root@gitlab-runner ~]#hwclock 
cWed 18 May 2022 07:23:04 AM CST  -0.282491 seconds
[root@gitlab-runner ~]#clock
Wed 18 May 2022 07:23:05 AM CST  -0.065940 seconds

🍀 例子

%Y表示年、%m表示月、%d表示天、
%H表示小时、%M表示分钟、%S表示秒;(%T==%H:%M:%S)

image-20220530214021950

📍 例子:获取年月日:date +%Y-%m-%d ;date %F

方法1:

[root@gitlab-runner ~]#date +%F
2022-05-18

# 说明:
%F 显示当下日期

方法2:

[root@gitlab-runner ~]#date +%Y-%m-%d
2022-05-18 

🍀 例子:date +%y-%m-%d %H:%M:%S

%y 代表年份最后2位数

image-20220530214543577

🍀 利用变量输出当前时间:

[root@gitlab-runner ~]#DATETIME=$(date "+%Y-%m-%d %H:%M:%S %A")
[root@gitlab-runner ~]#echo $DATETIME
2022-05-18 07:25:48 Wednesday
📍 例子:获取时间戳:date +%s
[root@gitlab-runner ~]#date +%s #%s表示时间戳
1652830295

[root@gitlab-runner ~]#date --date=20150820 +%s  #获取2015/08/20 的时间戳。
1440000000

# %s表示linux时间戳的秒数。
#  Unix时间戳(英文为Unixepoch, Unix time, POSIX time 或 Unix timestamp)
#  是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
📍 例子:显示周几:date +%A ;date +%a
[root@gitlab-runner ~]#date +%A
Wednesday

[root@gitlab-runner ~]#date +%a
Wed

# 说明:
%A 显示周
%a 显示周(前3个字母,其缩写形式)
📍 例子:显示月份:date +%B;date +%b
[root@gitlab-runner ~]#date +%B
May

[root@gitlab-runner ~]#date +%b
May

# %B %b 显示月份
📍 例子:时间格式的2种输出
[root@localhost ~]# date +%F_%H-%M-%S #方法1
2021-03-10_14-26-39

[root@localhost ~]# date +%Y-%m-%d_%H-%M-%S #方法2
2021-03-10_14-28-31

🍀 例子:显示昨天和明天

#当前日期:
[root@k8s-master ~]#date
Mon May 30 21:49:36 CST 2022

[root@k8s-master ~]#date -d yesterday
Sun May 29 21:51:58 CST 2022
[root@k8s-master ~]#date -d tomorrow
Tue May 31 21:52:03 CST 2022

或者:
[root@k8s-master ~]#date +%Y%m%d -d "-1 day"
20220529
[root@k8s-master ~]#date +%Y%m%d -d "+1 day"
20220531

🍀 例子:显示本月和下月

[root@k8s-master ~]#date +%Y%m%d -d "-1 month"
20220430
[root@k8s-master ~]#date +%Y%m%d -d "+1 month"
20220630

或者:
[root@k8s-master ~]#date +%Y%m%d --date="-1 month"
20220430
[root@k8s-master ~]#date +%Y%m%d --date="+1 month"
20220630

🍀 例子:shell脚本指定日期减去一天或几天

date -d参数可以根据当前日期获取更多我们需要的日期。
#如果只减去一天的话,直接写就可以了。
#date -d"yesterday 20150401" +%Y%m%d
[root@k8s-master ~]#date -d"yesterday 20150401" +%Y%m%d
20150331

#如果要减去几天,还可以这样写,如果用负数是往前数,
#date -d"10 day ago 2015-04-01" +%Y-%m-%d
[root@k8s-master ~]#date -d"10 day ago 2015-04-01" +%Y-%m-%d
2015-03-22

#在指定的日期上加上指定的小时
[dc@dc010.tj.momo.com init_env]$ date -d "20150416 12 3 hour" +"%Y%m%d%H"
2015041615

#在指定的日期上减去指定的小时
[dc@dc010.tj.momo.com init_env]$ date -d "20150416 12 -1 hour" +"%Y%m%d%H"
2015041611

#在指定的日期上加上指定的分钟
[dc@dc010.tj.momo.com init_env]$ date -d "20150416 12:20 10 minute" +"%Y%m%d%H%M"
201504161230
2.修改系统时间
📍 例子:修改日期和时间
date -s '2015-04-11 13:15:15' 

image-20220530213531590

date命令修改完时间后,系统时间立即且永久生效,再次登录shell发现已经是修改后的时间了:

📍 例子:修改日期
[root@localhost ~]# date -s 2015/08/23 #设置日期
Sun Aug 23 00:00:00 CST 2015

image-20220530213744100

或者:

image-20220530213803111

📍 例子:修改时间
[root@localhost ~]# date -s 19:18:30 #设置时间
Sun Aug 9 19:18:30 CST 2015

image-20220530213846304

2、显示与设定硬件时钟:clock命令 & hwclock命令

命令介绍

hwclock命令是一个硬件时钟访问工具,它可以显示当前时间、设置硬件时钟的时间和设置硬件时钟为系统时间,也可设置系统时间为硬件时钟的时间。

hwclock和clock用来显示与设定硬件时钟,不过hwclock和clock可以视为一个命令。(clock是hwclock的软连接。

# type -a hwclock
hwclock is /sbin/hwclock
hwclock is /usr/sbin/hwclock

# type -a clock
clock is /sbin/clock 

# ls -l /sbin/clock
lrwxrwxrwx. 1 root root 7 1213 2013 /sbin/clock -> hwclock
命令选项
–debug 	显示hwclock执行时详细的信息。
–directisa	hwclock预设从/dev/rtc设备来存取硬件时钟。若无法存取时,可用此参数直接以I/O指令来存取硬件时钟。
–set –date=<日期与时间> 	设定硬件时钟。
–show	显示硬件时钟的时间与日期。
–systohc	将硬件时钟调整为与目前的系统时钟一致。
–test 	仅测试程序,而不会实际更改硬件时钟。
–utc	若要使用格林威治时间,请加入此参数,hwclock会执行转换的工作。
–version	显示版本信息。
-w, --systohc 以系统时钟为准,校正硬件时钟
-s, --hctosys 以硬件时钟为准,校正系统时钟
1. 查看硬件时间:clock 或者 hwclock
[root@k8s-master ~]#clock
Tue 31 May 2022 06:51:04 AM CST  -0.178876 seconds
[root@k8s-master ~]#hwclock 
Tue 31 May 2022 06:51:08 AM CST  -0.677708 seconds
2. 设置硬件时钟
📍 例子:设置硬件时钟
clock --set --date='2015/08/23 19:33:00' #设置硬件时间
hwclock --set --date '2015-04-11 13:36:11'
📍 例子:将系统时钟同步–>到硬件时钟
方法1  clock -w
# date
2015年 04月 11日 星期六 20:36:26 CST
# clock
2015年04月11日 星期六 13时41分18秒  -0.437760 seconds

# clock -w       #将系统时钟同步到硬件时钟
# clock
2015年04月11日 星期六 20时37分36秒  -0.515922 seconds
方法2   clock --systohc
# clock --set --date="08/16/2013 13:26:00"
# clock
2013年08月16日 星期五 13时26分04秒  -0.390867 seconds
# date
2015年 04月 11日 星期六 20:41:13 CST
# clock --systohc
# clock
2015年04月11日 星期六 20时43分18秒  -0.094007 seconds
📍 例子:将硬件时钟同步–>到系统时钟
# clock --set --date="08/16/2013 13:26:00" 
 
# clock
2013年08月16日 星期五 13时26分03秒  -0.281525 seconds
# date
2015年 04月 11日 星期六 20:45:14 CST

# clock --hctosys   \\时钟同步
# date
2013年 08月 16日 星期五 13:26:22 CST
# clock
2013年08月16日 星期五 13时26分25秒  -0.406511 seconds
📍 例子:一般,我们把系统时钟与网络时钟同步,再同步到硬件时钟
#1 ntpdate 0.rhel.pool.ntp.org
11 Apr 13:48:03 ntpdate[5786]: step time server 202.112.29.82 offset 52100210.175926 sec
# date
2015年 04月 11日 星期六 13:48:14 CST

#2 clock -w
# clock
2015年04月11日 星期六 13时48分30秒  -0.750266 seconds

3、时区:timedatectl命令

📍 例子:查看日期时间及NTP状态(包括时区)
[root@k8s-master ~]#timedatectl 
      Local time: Tue 2022-05-31 07:14:15 CST
  Universal time: Mon 2022-05-30 23:14:15 UTC
        RTC time: Mon 2022-05-30 23:14:15
       Time zone: Asia/Shanghai (CST, +0800)
     NTP enabled: n/a
NTP synchronized: no
 RTC in local TZ: no
      DST active: n/a
📍 例子:配置时区

(1)查看当前时区:

查看时间:

image-20220531071516087

或者用如下命令查看:

ll /etc/localtime

image-20220531071528519

(2)配置时区

#查看有哪些时区:timedatectl list-timezones |more
[root@k8s-master ~]#timedatectl list-timezones |more
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
Africa/Asmara
Africa/Bamako
Africa/Bangui
Africa/Banjul
……

(3)配置为亚洲/上海时区:

timedatectl set-timezone Asia/Shanghai

(4)再次查看当前时区:

image-20220531071719632

📍 例子:OpenStack中配置时间同步服务方法

image-20220531072203868

注意:

同步时间 //注意这里原来装系统时已经选好了上海时区,这里就不再选择时区了。

[root@openstack-template ~]# date
Sun Oct 11 09:28:12 CST 2020
#1
[root@openstack-template ~]# ntpdate time1.aliyun.com # 和阿里云同步时间

#2
11 Oct 09:36:35 ntpdate[1618]: step time server 203.107.6.88 offset 5.388041 sec
[root@openstack-template ~]# hwclock -w # 同步时间到硬件

[root@openstack-template ~]# date
Sun Oct 11 09:36:57 CST 2020
[root@openstack-template ~]#

#3
这边做个定时任务:由于后期虚机可能要迁移
[root@openstack-template ~]# whereis ntpdate
ntpdate: /usr/sbin/ntpdate /usr/share/man/man8/ntpdate.8.gz
crontab: installing new crontab
*/10 * * * * /usr/sbin/ntpdate time1.aliyun.com && hwclock -w
📍 例子:自己vmwareworkstation虚机系统时钟与当前时间不一致问题(2021.3.10)(已解决)

注意,自己的vmwareworkstation虚机date查看的系统时钟比实际慢了好几个小时。且clock显示的硬件时钟时间是12格式制的,这个貌似正常。

image-20210310141614097

#默认无ntp服务,因此无法用ntpdate命令与网络时间同步
[root@localhost ~]# rpm -qa|grep ntp
#安装ntp

[root@localhost ~]# yum install -y ntp
#与阿里云ntp服务同步
[root@localhost ~]# ntpdate time1.aliyun.com 
10 Mar 14:21:24 ntpdate[18073]: step time server 203.107.6.88 offset 126659.756107 sec
[root@localhost ~]# hwclock -w #同步时间到硬件时钟
[root@localhost ~]# date #总这里可以看到,date显示的系统时钟是4进制格式,而clock显示的硬件时钟依然是12进制格式。
Wed Mar 10 14:21:37 CST 2021
[root@localhost ~]# clock
Wed 10 Mar 2021 02:21:39 PM CST  -0.149360 seconds
📍 注意:CST概念,utc为标准时区

image-20220531072434971

#中国比美国快13个小时:

img

#GMT+8 东八区

img

#CST可视为美国、澳大利亚、古巴或中国的标准时间。

img

📍 注意:ntpdate可同步的时区

🍀

image-20220531072616631

🍀 例子:和阿里云同步时间

[root@openstack-template ~]# ntpdate time1.aliyun.com

4、显示日历:cal命令

📍 例子:cal # 默认显示当月日历

image-20220531073045259

📍 例子:cal 2030 # 显示某年的日历

image-20220531073106752

📍 例子:cal -y # -y选项代表本年的日历

img

📍 例子:cal 11 2020 # 显示某年某个月份

img

关于我

我的博客主旨:

  • 排版美观,语言精炼;
  • 文档即手册,步骤明细,拒绝埋坑,提供源码;
  • 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!

🍀 微信二维码
x2675263825 (舍得), qq:2675263825。

image-20211002091450217

🍀 微信公众号
《云原生架构师实战》

image-20211002141739664

🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

image-20211002092344616

🍀 博客
www.onlyyou520.com

image-20220513150311181

🍀 知乎

https://www.zhihu.com/people/foryouone

最后

template ~]# ntpdate time1.aliyun.com


### 4、显示日历:`cal命令`

#### 📍 例子:cal # 默认显示当月日历

[外链图片转存中...(img-ytanfuIS-1654129179697)]

#### 📍 例子:cal 2030 # 显示某年的日历

[外链图片转存中...(img-FQka2Zxe-1654129179698)]

#### 📍 例子:cal -y # -y选项代表本年的日历

[外链图片转存中...(img-JfALTdiq-1654129179699)] 

#### 📍 例子:cal 11 2020 # 显示某年某个月份

[外链图片转存中...(img-ZBCeGgMe-1654129179701)]  

## 关于我

我的博客主旨:

- 排版美观,语言精炼;
- 文档即手册,步骤明细,拒绝埋坑,提供源码;
- 本人实战文档都是亲测成功的,各位小伙伴在实际操作过程中如有什么疑问,可随时联系本人帮您解决问题,让我们一起进步!



🍀 微信二维码
x2675263825 (舍得), qq:2675263825。

[外链图片转存中...(img-wn2qRZOk-1654129179702)]



🍀 微信公众号
《云原生架构师实战》

[外链图片转存中...(img-3YkeW4oN-1654129179706)]



🍀 csdn
https://blog.csdn.net/weixin_39246554?spm=1010.2135.3001.5421

[外链图片转存中...(img-Ft6sb8rS-1654129179707)]



🍀 博客
www.onlyyou520.com

[外链图片转存中...(img-LcXhczwA-1654129179708)]



🍀 知乎

https://www.zhihu.com/people/foryouone

[外链图片转存中...(img-LCKzznVN-1654129179710)]

## 最后

好了,关于本次就到这里了,感谢大家阅读,最后祝大家生活快乐,每天都过的有意义哦,我们下期见!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值