ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

Linux 时间同步systemd-timesyncd介绍

2021-06-09 15:30:14  阅读:299  来源: 互联网

标签:systemd 05 NTP HP Linux 服务器 timesyncd


在Linux系统中存在两个时钟时间,分别是

硬件时钟RTC(Real Time Clock)
系统时钟(System Clock)
硬件时钟是指的在主板上的时钟设备,也就是通常可以在BIOS画面设置的时钟,即使关机状态也可以计算时间。

而系统时钟则是指Kernel中的时钟,其值是由1970年1月1日00:00:00 UTC时间至当前时间所经历的秒数总和。当Linux启动的时候,系统时钟会读取硬件时钟的设定,之后系统时钟独立运作。长时间运行两者可能将会产生误差。另外所有的Linux相关指令都是读取系统时钟指定的,如date。

我们这里讨论的是系统时间。

NTP
NTP,网络时间协议,使用 123/udp 端口进行网络时钟同步;NTP 是仍在使用中的最古老的网络传输协议之一(1985 年前开始)。

NTP软件的实现方法:
1、以前Linux时间同步基本是使用 ntpdate 和 ntpd 这两个工具实现的,但是这两个工具已经很古老了。后面的文章会单独介绍
注:ntpdate和ntpd是互斥的,两者不能同时使用。ntpd是步进式平滑的逐渐调整时间,而ntpdate是断点式更新时间。

2、RHEL/CentOS 7.x 已经将 chrony 作为默认时间同步工具了。后面的文章会单独介绍

3、其他Linux (如 ubuntu,debian,openSUSE) 使用 systemd-timesyncd 服务。下面主要针对这个进行介绍
注:systemd-timesyncd是断点式更新时间,也就是时间不同立即更新,这样会对某些服务产生影响,所以在生产环境尽量不要用,在桌面环境或者是系统刚开机时来进行时间同步还是很好的。timesyncd 替代了 ntpd 的客户端的部分。默认情况下 timesyncd 会定期检测并同步时间。它还会在本地存储更新的时间,以便在系统重启时做时间单步调整。如果是虚拟机环境,应该把与主机时间同步功能关闭后在启用systemd-timesyncd,否则可能会有问题,systemd-timesyncd只能作为客户端,不能作为NTP服务器,要成为NTP服务器,可以安装chrony、ntpd,或者open-ntp。推荐chrony。

一、systemd-timesyncd 客户端
systemd 提供了 systemd-timesyncd 客户端,它是一个用于跨网络同步系统时钟的守护服务。它实现了一个 SNTP 客户端。与NTP的复杂实现相比,这个服务简单的多,它只专注于从远程服务器查询然后同步到本地时钟。在/etc/systemd/timesyncd.conf 中配置你的(时间)服务器。大多数 Linux 发行版都提供了一个默认配置,它指向发行版维护的时间服务器上。systemd-timesyncd只会更改系统时间不会更改硬件时间,可以通过hwclock -w命令将系统时间同步到硬件时间

1、通过timedatectl命令查看时钟是否与互联网同步。只需运行:

OpenSUSE:~ # timedatectl      ##openSUSE15.1下查看
Local time: Tue 2020-05-05 10:38:53 CST      ##本地时间
Universal time: Tue 2020-05-05 02:38:53 UTC    ##协调世界时
RTC time: Tue 2020-05-05 02:38:51        ##硬件时间
Time zone: Asia/Shanghai (CST, +0800)      ##时区,我这里为东8区
Network time on: yes       ##NTP时间同步是否开启,yes表示是
NTP synchronized: yes      ##如果和远程NTP服务器成功同步,显示为yes

RTC in local TZ: no no表示硬件时钟设置为协调世界时(UTC),yes表示硬件时钟设置为本地时间

root@HP:~# timedatectl      ##Ubuntu18.04下查看,下面的说明都以Ubuntu系统为例说明
Local time: 二 2020-05-05 14:52:52 CST
Universal time: 二 2020-05-05 06:52:52 UTC
RTC time: 二 2020-05-05 06:52:52
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes        ##如果和远程NTP服务器成功同步,显示为yes
systemd-timesyncd.service active: yes    ##NTP时间同步是否开启,yes表示是,systemd-timesyncd服务为活动也就是开启了NTP时间同步

RTC in local TZ: no

如上所示,timedatectl 命令显示本地时间、世界时、时区以及系统时钟是否与互联网服务器同步,以及 systemd-timesyncd.service 是处于活动状态还是非活动状态。

2、如果时钟不同步,你会看到下面中显示的 System clock synchronized: no。

root@HP:~# timedatectl
Local time: 二 2020-05-05 15:22:06 CST
Universal time: 二 2020-05-05 07:22:06 UTC
RTC time: 二 2020-05-05 07:22:06
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
systemd-timesyncd.service active: yes

RTC in local TZ: no

时间同步已禁用。

注意:上面的截图是旧截图。这就是你看到不同日期的原因。

3、如果你看到 System clock synchronized: 值设置为 no,那么 timesyncd 服务可能处于非活动状态。因此,只需重启服务并看下是否正常。

root@HP:~# systemctl restart systemd-timesyncd.service

4、现在检查 timesyncd 服务状态:

root@HP:~# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset
Active: active (running) since Tue 2020-05-05 15:14:18 CST; 5h 6min ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 5973 (systemd-timesyn)
Status: “Synchronized to time server [2001:67c:1560:8003::c8]:123 (ntp.ubuntu.com).”      ##这里很重要这里显示了同步的NTP服务器及端口号
Tasks: 2 (limit: 4915)
CGroup: /system.slice/systemd-timesyncd.service
└─5973 /lib/systemd/systemd-timesyncd

5月 05 15:14:17 HP systemd[1]: Starting Network Time Synchronization…
5月 05 15:14:18 HP systemd[1]: Started Network Time Synchronization.
5月 05 15:14:18 HP systemd-timesyncd[5973]: Synchronized to time server [2001:67c:1560:8
5月 05 20:10:48 HP systemd-timesyncd[5973]: Synchronized to time server [2001:67c:1560:8

lines 1-14/14 (END)

如果此服务已启用并处于活动状态,那么系统时钟应与互联网时间服务器同步。

可以使用timedatectl命令验证是否启用了时间同步:

5、如果仍然不起作用,请运行以下命令以启用时间同步:

root@HP:~# timedatectl set-ntp true

现在,你的系统时钟将与互联网时间服务器同步

6、要禁用NTP时间同步,在终端键入以下命令。

root@HP:~# timedatectl set-ntp false

如果要手工修改时间至某个时间就必须将该项设置为false,否则时间设置不会生效

二、systemd-timesyncd 配置文件

systemd-timesyncd 启动时会读取 /etc/systemd/timesyncd.conf 配置文件,内容如下:

root@HP:~# vi /etc/systemd/timesyncd.conf
[Time]
#NTP=
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32

#PollIntervalMaxSec=2048

默认虽然上面的选项都处于注释状态,但是systemd-timesyncd还是会去默认的NTP服务器进行同步,如果要更改NTP服务器请修改上面的选项,选项解释如下:

NTP=
一个空格分隔的NTP服务器列表, 可以使用主机名,也可以使用IP地址。在运行时, 此处设置的列表将与 systemd-networkd.service中已配置的NTP服务器列表合并在一起。 systemd-timesyncd 将会依次尝试列表中的每个NTP服务器, 直到同步成功为止。 如果为此选项设置一个空字符串, 那么表示清空所有此选项先前已设置的NTP服务器列表。 此选项的默认值为空。

FallbackNTP=
一个空格分隔的NTP服务器列表,用作备用NTP服务器。 可以使用主机名,也可以使用IP地址。 如果所有已配置在 systemd-networkd.service中的NTP服务器以及上述 NTP= 中设置的NTP服务器都尝试失败, 那么将尝试此处设置的备用NTP服务器。 如果为此选项设置一个空字符串, 那么表示清空所有此选项先前已设置的NTP服务器列表。 若未设置此选项, 则使用编译时设置的默认备用NTP服务器。

RootDistanceMaxSec=
最大可接受的"root distance"秒数(最大误差)。 默认值为 5 秒。

PollIntervalMinSec=, PollIntervalMaxSec=
NTP消息的 最小/最大轮询间隔秒数。 PollIntervalMinSec= 必须不小于 16 秒。 PollIntervalMaxSec= 必须大于 PollIntervalMinSec= 。 PollIntervalMinSec= 默认为 32 秒, PollIntervalMaxSec= 默认为 2048 秒。

举例将同步的NTP服务器设置成国内比较好用的

root@HP:~# vi /etc/systemd/timesyncd.conf
[Time]

NTP=ntp.ntsc.ac.cn cn.ntp.org.cn     ##只设置NTP这行,其它的不必,增加2个NTP服务器,中间用空格隔开

重启systemd-timesyncd服务生效

root@HP:~# systemctl restart systemd-timesyncd.service

再次查看服务状态

root@HP:~# systemctl status systemd-timesyncd.service
● systemd-timesyncd.service - Network Time Synchronization
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset
Active: active (running) since Tue 2020-05-05 21:56:35 CST; 3s ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 1578 (systemd-timesyn)
Status: “Synchronized to time server 114.118.7.161:123 (ntp.ntsc.ac.cn).”      ##这里已经更改成功
Tasks: 2 (limit: 4915)
CGroup: /system.slice/systemd-timesyncd.service
└─1578 /lib/systemd/systemd-timesyncd

5月 05 21:56:35 HP systemd[1]: Starting Network Time Synchronization…
5月 05 21:56:35 HP systemd[1]: Started Network Time Synchronization.
5月 05 21:56:35 HP systemd-timesyncd[1578]: Synchronized to time server 114.118.7.161:12
root@HP:~#

标签:systemd,05,NTP,HP,Linux,服务器,timesyncd
来源: https://blog.csdn.net/ruth13156402807/article/details/117743928

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有