Ubuntu使用Chrony配置NTP服务器和客户端

我们前面介绍了H3C VSR如何配置作为NTP服务器听说最近时间不准了?是NTP出问题了吗?,对于没有企业路由器的场景,也可以使用Linux服务器来作为NTP服务器。

在有些场景下,我们需要的是准确的互联网时间;而在某些场景下,我们需要的可能就是内网设备时间相同就可以了。如果通过管理员手工配置来修改网络中各台设备的系统时间,不但工作量巨大,而且也不能保证时间的精确性。

NTP(Network Time Protocol,网络时间协议)可以用来在分布式时间服务器和客户端之间进行时间同步,使网络内所有设备的时间保持一致,并提供较高的时间同步精度。和业务相关的设备、系统、软件等强烈建议配置开启NTP,以保持时间准确,这样在记录日志、问题定位、计费系统等场景下会方便很多。

NTP采用的传输层协议为UDP,使用的UDP端口号为123。如果网络中有限制,请注意调整规则。

在Ubuntu系统中,默认使用Chrony作为NTP服务的管理工具,可以用来配置NTP服务器及NTP客户端。如果没有安装的,可以使用以下命令安装:

apt install chrony -y

ec93cc422fb3542638d400f8b01a013c.png

我们首先使用Chrony配置其作为其他设备的时钟同步源。编辑Chrony的配置文件/etc/chrony/chrony.conf,添加或修改上游NTP服务器,我们可以使用Ubuntu的NTP池服务器或其他可靠的 NTP 服务器,或者干脆一个都不用。

e2681fe0a26707c1ef0b0f74696417b0.png

服务器配置结尾的“iburst”选项,作用是如果在一个标准的轮询间隔内没有应答,客户端会发送一定数量的包(八个包而不是通常的一个)给 NTP 服务器。如果在短时间内呼叫 NTP 服务器几次,没有出现可辨识的应答,那么本地时间将不会变化。“maxsources 2”选项用于限制从该池中使用的最大服务器数量。即使池域名解析返回多个IP地址,客户端只会选择其中的2个作为实际同步源,避免因连接过多服务器导致资源浪费或网络拥塞。   

此外,Chrony服务默认拒绝所有外部访问,我们需要添加allow参数以允许特定网络段的客户端或所有客户端访问NTP服务器。

allow 192.168.1.0/24
allow all

当然,按照NTP规范,每个NTP服务器都有时钟层级,NTP通过时钟层数来定义时钟的准确度。时钟层数的取值范围为0~16,取值越小,时钟准确度越高。通常将从权威时钟(如原子时钟)获得时间同步的NTP服务器的层数设置为1,并将其作为主时间服务器,为网络中其他设备的时钟提供时间同步。网络中的设备与主时间服务器的NTP距离,即NTP同步链上NTP服务器的数目,决定了设备上时钟的层数。

如果时钟层数过大,则客户端可能不会从此NTP服务器同步时间。因此,我们一般可以将服务器层数设置为5-10之间。

local stratum 2

配置完成后,我们重启Chrony服务以应用配置更改。

systemctl restart chrony
systemctl status chrony

0fc233c3e0a2f0f5be170f58cdf22070.png

如果你的系统启用了防火墙,需要放通NTP端口(UDP 123)通过防火墙ufw命令简介,我就比较粗暴,直接关了。

ufw allow 123/udp
ufw reload

7ea38262cf8ba31da7a9d86599f41dbb.png

接下来,我们来配置NTP客户端设备。同样是编辑客户端的Chrony配置文件,只需要配置NTP客户端指向我们的NTP服务器就可以了。

nano /etc/chrony/chrony.conf

eff2f0977bbc5d6ca6f6c8f31b149f26.png

我们先看一下客户端设备的时间。

8919c9cbef7b8b3ebfe8fbc830b7cbb5.png

然后我们调整一下服务器的时间,调整之前需要先关闭NTP服务,调整之后再重启开启。

timedatectl set-ntp false
timedatectl set-time "2024-1-1 11:11:11"
timedatectl set-ntp true

f305abfd3526955f8e69b268028a8c4f.png

最后,我们重启客户端的Chrony服务,验证时间同步是否成功。

systemctl restart chrony

a2db34469ce9df200489853aabdb5994.png

我们可以使用以下命令查看客户端的时间同步状态。

chronyc tracking
chronyc sources

5057506ef6744b3f3c8ee18bf855a52a.png

对应的,我们可以把之前VSR的时间也配置一下NTP客户端们只需要两条命令即可。

#
 ntp-service enable
 ntp-service unicast-peer 192.168.200.244

5c332a1b08a946cd6153f33b90cf4906.png

查看NTP同步状态。   

ebdee391842874714102c70845389471.png

这个NTP操作真是太简单了!   

***推荐阅读***

卷土重来!这次终于把FortiGate的IPsec VPN配置成功了!

漂亮!FortiGate配置Hub-Spoke类型的IPsec VPN竟然是Full-Mesh架构

如何配置GENEVE?我们用飞塔防火墙FortiGate来演示一下

FortiGate配置SSL VPN

开通效率大大提高,通过API开通腾讯云主机也太好用了吧!

Zabbix实战第一步:完成在Ubuntu Server的安装部署

用轻量应用服务器的注意了,0.5GB内存的规格请谨慎使用
Ubuntu磁盘空间不足或配置错误时,如何操作扩容?

Ubuntu安装、配置、操作、测评MySQL数据库全体验

当你买了一台Linux云主机,应该如何测试主机性能?

没有图形界面,如何快速部署一个Ubuntu 24.10的Server虚拟机

用Ubuntu的时候,你是不是被127.0.0.53困扰好久了?来看看怎么修改DNS配置

用轻量应用服务器的注意了,0.5GB内存的规格请谨慎使用

a08d67e38e1d5e8e8dbdea48611fc9a1.jpeg

<think>嗯,用户想在Ubuntu上用systemd定时器ntp工具每分钟同步时间到ntp.aliyun.com。首先,我需要确定用户使用ntp工具是什么。Ubuntu常见的ntp工具有ntpdchrony,但可能用户已经安装了其中一个或者需要安装。不过,现在系统可能默认使用systemd-timesyncd,但timesyncd的配置可能不支持自定义NTP服务器的频率,因为它有自己的机制。不过用户明确提到要使用ntp工具,可能需要安装ntpchrony。 比如,如果用户安装的是ntp,那么需要修改/etc/ntp.conf文件,添加server ntp.aliyun.com。然后重启ntp服务。但这里用户希望每分钟同步一次,而ntp默认会根据时钟偏差调整同步频率,可能不是每分钟一次。所以可能需要结合systemd的定时器来强制每分钟执行一次同步命令。 或者,用户可能更倾向于使用chrony,因为chrony更适合间歇性连接或频繁调整的环境。但不管用哪个工具,都需要配置服务器地址,并设置systemd定时器来触发同步。 接下来是systemd定时器的设置。用户需要创建一个.service文件来定义执行同步的任务,比如运行ntpd -gq或者使用chronyc的命令。然后创建一个.timer文件,设置每分钟执行一次。 但需要注意的是,强制每分钟同步可能不太符合NTP的最佳实践,因为NTP协议本身会根据系统时钟的偏差智能调整同步间隔,频繁同步可能对服务器造成负担,或者被NTP服务器拒绝。但用户的需求明确是每分钟一次,所以可能需要忽略这些考虑,或者给出相应的提醒。 步骤大概如下: 1. 安装ntpchrony,比如sudo apt install ntp。 2. 配置/etc/ntp.conf,添加server ntp.aliyun.com。 3. 重启ntp服务:sudo systemctl restart ntp。 4. 创建systemd服务单元文件,比如/etc/systemd/system/sync-time.service,内容为执行ntpd -gq(可能需要使用sudo ntpd -gq -n,避免后台运行)。 5. 创建定时器单元文件,比如/etc/systemd/system/sync-time.timer,设置OnCalendar=*-*-* *:*:00表示每分钟触发。 6. 启用并启动定时器。 另外,可能需要考虑权限问题,比如是否需要使用sudo或者在服务文件中设置User=root。同时,执行ntpd命令可能需要停止原本的ntp服务,避免冲突。或者,使用chrony的话,可以用chronyc makestep来立即同步。 比如,如果使用chrony配置/etc/chrony/chrony.conf,添加server ntp.aliyun.com iburst,然后服务文件执行chronyc -a makestep,而定时器每分钟触发一次。 不过,用户可能需要的是结合ntpdate这样的工具,但ntpdate在较新系统中已被废弃,推荐使用ntpd -gq或chronyc。需要确认用户系统支持哪些命令。 另外,使用systemd定时器的OnCalendar语法是否正确,比如每分钟触发应该是OnCalendar=*:*:00,或者更精确的表达式。可能需要用OnCalendar=*-*-* *:*:00,表示每分钟的0秒触发。 同时,定时器的Persistent=true可以确保如果系统在预定时间处于关机状态,下次启动时会立即执行。 最后,测试定时器是否正常工作,查看日志用journalctl -u sync-time.timersync-time.service。 可能遇到的问题包括服务执行权限、命令路径、服务超时等,需要在服务文件中设置合适的参数,比如Type=oneshot,RemainAfterExit=no,以及Restart=no等。 总结步骤: 安装NTP工具,配置服务器,创建systemd服务定时器,启用并测试。</think>### 分步教程:Ubuntu 使用 systemd 定时器配置 NTP 每分钟同步 #### 1. 安装 NTP 工具 首先安装 `ntp` 或 `chrony`(推荐后者,响应更快): ```bash sudo apt update && sudo apt install chrony # 安装 chrony # 或 sudo apt install ntp # 安装传统 ntp ``` #### 2. 配置 NTP 服务器 - **Chrony 配置**: 编辑 `/etc/chrony/chrony.conf`,添加阿里云 NTP 服务器: ``` server ntp.aliyun.com iburst ``` 重启服务: ```bash sudo systemctl restart chrony ``` - **传统 NTP 配置**: 编辑 `/etc/ntp.conf`,添加以下行: ``` server ntp.aliyun.com ``` 重启服务: ```bash sudo systemctl restart ntp ``` #### 3. 创建 systemd 服务单元 新建服务文件 `/etc/systemd/system/sync-time.service`: ```ini [Unit] Description=Force NTP time sync [Service] Type=oneshot # Chrony 用户使用以下命令 ExecStart=/usr/bin/chronyc -a makestep # 传统 NTP 用户使用以下命令(需停止原服务避免冲突) # ExecStart=/usr/sbin/ntpd -gq -n ``` > 注:`ntpd -gq -n` 中 `-n` 表示前台运行,避免与 systemd 冲突。 #### 4. 创建 systemd 定时器单元 新建定时器文件 `/etc/systemd/system/sync-time.timer`: ```ini [Unit] Description=Minutely NTP sync timer [Timer] OnCalendar=*:*:00 # 每分钟触发(精确到秒) AccuracySec=1s # 允许 1 秒误差 Persistent=true # 补执行错过的任务 [Install] WantedBy=timers.target ``` #### 5. 启用并启动定时器 ```bash sudo systemctl daemon-reload sudo systemctl enable sync-time.timer --now ``` #### 6. 验证配置 - 查看定时器状态: ```bash systemctl list-timers sync-time.timer ``` - 检查同步日志: ```bash journalctl -u sync-time.service -u sync-time.timer ``` --- ### 注意事项 1. **NTP 协议限制**:频繁同步可能触发 NTP 服务器的速率限制,建议优先依赖 NTP 守护进程的自适应算法[^1]。 2. **时间跃变风险**:`chronyc makestep` 会强制步进同步,可能导致应用程序异常,生产环境慎用。 3. **替代方案**:使用 `systemd-timesyncd` 内置服务(默认)并配置: ```bash sudo timedatectl set-ntp true echo "NTP=ntp.aliyun.com" | sudo tee /etc/systemd/timesyncd.conf sudo systemctl restart systemd-timesyncd ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Danileaf_Guo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值