chronyd与ntpd冲突问题分析
一、文档说明系统为麒麟v10sp1-arm-0711(源自openEuler,centos7好像也有相同的现象)。chronyd和ntp同时开机自启的情况下只有chronyd生效,本文主要说明chronyd比ntp优先级高的原理机制。二、问题分析2.1查看服务状态左边使用systemctl status ntpd,查看ntpd状态;右边使用 systemctl status chronyd,查看c
一、文档说明
系统为麒麟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.service
,After
表示在什么之后开启,所以chronyd.service
的开启在ntpd.service
之后。
chronyd.service
配置文件可见,Conflicts
后面配置了ntpd.service
,Conflicts
表示与什么服务冲突,所以chronyd.service
与ntpd.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.service
,Conflicts
后面去掉ntpd.service
。
/usr/lib/systemd/system/ntpd.servic
e配置文件,After
后面加上chronyd.service
,Conflicts
后面加上chronyd.service
。
而后,systemctl enable ntpd
及systemctl start ntpd
,即可。
四、与红帽处理方式的区别
红帽的处理步骤如下:
- 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
- Open 50-chronyd.list file and comment out like below:
#chronyd.service
- 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。
更多推荐
所有评论(0)