chronyd与ntpd冲突问题分析

一、文档说明

系统为麒麟v10sp1-arm-0711(源自openEuler,centos7好像也有相同的现象)。chronyd和ntp同时开机自启的情况下只有chronyd生效,本文主要说明chronyd比ntp优先级高的原理机制。

二、问题分析

2.1 查看服务状态

左边使用systemctl status ntpd,查看ntpd状态;右边使用 systemctl status chronyd,查看chronyd状态。
在这里插入图片描述

2.2 查看服务配置

使用systemctl status ntpd查看,ntpd的配置在/usr/lib/systemd/system/ntpd.service文件中;

[Unit]
Description=Network Time Service
After=syslog.target ntpdate.service sntp.service
Conflicts=systemd-timesyncd.service

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/ntpd
ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS
PrivateTmp=true

[Install]
WantedBy=multi-user.target

使用systemctl status chronyd查看,chronyd的配置在/usr/lib/systemd/system/chronyd.service文件中;

[Unit]
Description=NTP client/server
Documentation=man:chronyd(8) man:chrony.conf(5)
After=ntpdate.service sntp.service ntpd.service
Conflicts=ntpd.service systemd-timesyncd.service
ConditionCapability=CAP_SYS_TIME

[Service]
Type=forking
PIDFile=/var/run/chrony/chronyd.pid
EnvironmentFile=-/etc/sysconfig/chronyd
ExecStart=/usr/sbin/chronyd $OPTIONS
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full

[Install]
WantedBy=multi-user.target

2.3 分析原理

chronyd.service配置文件可见,After后面配置了ntpd.serviceAfter表示在什么之后开启,所以chronyd.service的开启在ntpd.service之后。

chronyd.service配置文件可见,Conflicts后面配置了ntpd.serviceConflicts表示与什么服务冲突,所以chronyd.servicentpd.service是冲突的。

故,根据文件中的配置,ntpd.service开启之后,才会开启chronyd.service,又因为配置了冲突,所以开启chronyd.service后,会关闭ntpd.service

三、解决方案

修改/usr/lib/systemd/system/ntpd.service

[Unit]
Description=Network Time Service
After=syslog.target ntpdate.service sntp.service chronyd.service
Conflicts=chronyd.service systemd-timesyncd.service

[Service]
Type=forking
EnvironmentFile=-/etc/sysconfig/ntpd
ExecStart=/usr/sbin/ntpd -u ntp:ntp $OPTIONS
PrivateTmp=true

[Install]
WantedBy=multi-user.target

修改/usr/lib/systemd/system/chronyd.service

[Unit]
Description=NTP client/server
Documentation=man:chronyd(8) man:chrony.conf(5)
After=ntpdate.service sntp.service 
Conflicts= systemd-timesyncd.service
ConditionCapability=CAP_SYS_TIME

[Service]
Type=forking
PIDFile=/var/run/chrony/chronyd.pid
EnvironmentFile=-/etc/sysconfig/chronyd
ExecStart=/usr/sbin/chronyd $OPTIONS
PrivateTmp=yes
ProtectHome=yes
ProtectSystem=full

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/chronyd.service配置文件,After后面去掉ntpd.serviceConflicts后面去掉ntpd.service

/usr/lib/systemd/system/ntpd.service配置文件,After后面加上chronyd.serviceConflicts后面加上chronyd.service

而后,systemctl enable ntpdsystemctl start ntpd,即可。

四、与红帽处理方式的区别

红帽的处理步骤如下:

  1. Check contents of the following directory. It should contain .list files for chronyd and ntpd as follows:
#ls /usr/lib/systemd/ntp-units.d/
50-chronyd.list  60-ntpd.list
  1. Open 50-chronyd.list file and comment out like below:
#chronyd.service
  1. Switch off then on timedate set-ntp:
#timedatectl set-ntp false
#timedatectl set-ntp true

区别在于:
红帽的方式是临时生效的,重启以后,还是只开启chronyd服务。
timedatectl set-ntp 会去读取/usr/lib/systemd/ntp-units.d/ 目录下的文件,根据数字大小,50比60小,所以会先去读取50-chronyd.list。

timedatectl set-ntp false,调systemctl stop去关闭当前的时间校时服务,当前的服务是chronyd,所以先关闭chronyd。
timedatectl set-ntp true,调systemctl start去开启时间校时服务,先读/usr/lib/systemd/ntp-units.d/50-chronyd.list,里面内容被注释了,为空;就接着读取/usr/lib/systemd/ntp-units.d/60-ntpd.list,所以开启了ntpd。

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值