centos 开机启动ntpd
这里提供两种方法解决问题:
方法一:
-
通过命令 systemctl enable ntpd 设置NTP服务开机自启动。
-
重启虚拟机后查看 服务运行状态 systemctl status ntpd ,发现服务并没有成功启动。
-
查看chrony是否被设置为开机自启动。通过指令 systemctl is-enabled chronyd 查看,发现这个服务已经被设置为开机自启动所以导致NTP服务的自启动失败。
-
所以要把 chrony 的自启动去掉。执行指令 systemctl disable chrony 。
-
重启虚拟机, 执行 systemctl status ntpd ,问题解决。
方法二:
需要开机自启动某服务,第一个想到的当然是开机启动自定义脚本。
在Centos之前版本只要在 /etc/rc.d/rc.local 文件中加入 启动服务的命令,当虚拟机重启时就会执行该文件中的命令,服务也就启动了。但是但Centos7版本,这个文件的权限被降低了,所以当你打开这个文件时,注释中很友好的提示让你给这个文件赋权,以确保它有可执行权限。chmod +x /etc/rc.d/rc.local 。
所以只要把指令写到这个文件中,就可以在开机时启动服务或者让虚拟机做其它事情。
使用 Chrony 作为 NTP 服务器
要将 Chrony 作为一个 NTP 服务器,方法很简单。
首先,你需要修改 /etc/chrony.conf 文件,并添加以下配置即可。
# 对于安全要求比较高的,这里可以限制谁能访问本机提供的 NTP 服务。
allow 192.168.1.0/24
# 设置 chronyd 监听在哪个网络接口
bindcmdaddress 0.0.0.0
# 这个地方很重要,如果服务器本身也不能同步时间,那么就用本地时间替代,层级为 10
local stratum 10
其次,重启 Chronyd 服务,以加载新的配置。
systemctl restart chronyd
Chronyd 服务启动成功后,会监听以下两个端口。
-
端口 123/udp 为标准的 NTP 监听端口,如果要对外提供 NTP Server 功能,必须开启防火墙和监听地址为外部可访问地址。如需修改,你可以通过配置 port 参数来修改。
-
端口 323/udp 为默认的管理端口。如需修改,你可以通过配置 cmdport 参数来修改。
最后,修改防火墙设置,以放行对 123/udp 的请求,这里以 CentOS 7 的 Firewalld 为例。
$ firewall-cmd --zone=public --add-port=123/udp --permanent$ firewall-cmd --reload
延伸阅读
一些时间相关的概念介绍
-
GMT、UTC、CST、DST 时间
UTC 整个地球分为二十四时区,每个时区都有自己的本地时间。在国际无线电通信场合,为了统一起见,使用一个统一的时间,称为通用协调时 (UTC, Universal Time Coordinated)。
GMT 格林威治标准时间 (Greenwich Mean Time) 指位于英国伦敦郊区的皇家格林尼治天文台的标准时间,因为本初子午线被定义在通过那里的经线。( UTC 与 GMT 时间基本相同)
CST 中国标准时间 (China Standard Time)
GMT + 8 = UTC + 8 = CST
DST 夏令时 (Daylight Saving Time) 指在夏天太阳升起的比较早时,将时间拨快一小时,以提早日光的使用。(中国不使用) -
硬件时间和系统时间
硬件时间:RTC (Real-Time Clock) 或 CMOS 时间,一般在主板上靠电池供电,服务器断电后也会继续运行。仅保存日期时间数值,无法保存时区和夏令时设置。
系统时间:一般在服务器启动时复制 RTC 时间,之后独立运行,保存了时间、时区和夏令时设置。
一些设置时区和时间的命令
- 查看当前系统时区
# 直接使用 timedatectl 命令也等同于以下命令 $ timedatectl status Local time: Fri 2018-2-29 13:31:04 CST Universal time: Fri 2018-2-29 05:31:04 UTC RTC time: Fri 2018-2-29 08:17:20 Time zone: Asia/Shanghai (CST, +0800) NTP enabled: yes NTP synchronized: yes RTC in local TZ: no DST active: n/a
- 设置当前系统时区
# 查看所有可用的时区 $ timedatectl list-timezones # 查看上海可用时区 $ timedatectl list-timezones | grep -E "Asia/S.*"Asia/SakhalinAsia/SamarkandAsia/SeoulAsia/ShanghaiAsia/SingaporeAsia/Srednekolymsk # 设置当前系统为 Asia/Shanghai 上海时区 $ timedatectl set-timezone Asia/Shanghai # 设置完时区后,在强制同步下系统时钟 $ chronyc -a makestep200 OK
- 显示系统的当前时间和日期
$ timedatectl set-time "YYYY-MM-DD HH:MM:SS" $ timedatectl set-time "YYYY-MM-DD" $ timedatectl set-time "HH:MM:SS"
- 修改当前日期时间
# 可以只修改其中一个 $ timedatectl set-time "2019-10-31 15:50:00"
- 设置硬件时间
# 硬件时间默认为 UTC,下面两条命令效果等同 $ timedatectl set-local-rtc 1$ hwclock --systohc --localtime
- 启用或者禁止 NTP 时间同步
# yes 或 no,1 或 0 也可以 $ timedatectl set-ntp yes/no $ timedatectl set-ntp true/flase
本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。