马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
服务器跑久了时间会漂,集群里几台机器差几秒,日志 对不上、证书验证失败、定时任务错位都会跟着来。Linux 下时间分"系统时间"和"硬件时间"两套,两者默认并不自动同步。本文把常见时间操作命令、NTP 服务安装、定时任务同步和 /etc/ntp.conf 的关键配置串成一条线讲清楚。
概论:两套时间是异步的
在 Linux 下,系统时间和硬件时间并不会自动同步。Linux 运行过程中,系统时间和硬件时间以异步的方式运行,互不干扰。硬件时间的运行靠 BIOS 电池来维持,而系统时间是用 CPU 来维持的。系统开机的时候,会自动从 BIOS 中取得硬件时间,设置为系统时间。
常见时间操作命令对照
| 命令 | 功能 |
| date 命令 | 查看系统时间,设置时间 |
| hwclock 命令 | 查看硬件时间,可以让系统时间和硬件时间同步 |
| ntpdate 命令 | 可以让不同机器之间同步时间 |
Linux 下设置系统时间
date 命令有多种时间格式可以设置,查看 date --help 可尝试设置信息。示例:
[root@localhost~]# date
Sun Feb 25 17:06:00 CST 2024
[root@localhost~]#
[root@localhost~]# date -s "2024-02-25 19:06:00" // 修改系统时间
Sun Feb 25 19:06:00 CST 2024
注意 -s 后面的格式要和图示一致,月日与年、时分秒之间留空格,写错了会被当成普通字符串忽略。
Linux 下设置硬件时间
[root@localhost~]# hwclock # 查看硬件时间(hwclock --show 或 hwclock -r 也可以)
Sun 25 Feb 2024 07:06:59 PM CST -0.10265 seconds
[root@localhost~]#
[root@localhost~]# hwclock --set --date "2024-02-25 20:00:00"
[root@localhost~]# hwclock
Sun 25 Feb 2024 08:00:00 PM CST -0.936520 seconds
系统时间与硬件时间的同步
[root@localhost~]# hwclock --systohc # 以系统时间同步硬件时间
[root@localhost~]# hwclock -w # 以系统时间同步硬件时间
[root@localhost~]# hwclock --hctosys # 以硬件时间同步系统时间
三个方向记住就行:systohc(系统→硬件)平时开完机补一次,hctosys(硬件→系统)用于开机校正。
NTP 服务器时间同步
主机长时间运行会导致时间偏差,有必要进行时间同步工作。Linux 系统下,一般用 ntp 服务器来同步不同机器的时间。一台机器,可以同时是 ntp 服务端和 ntp 客户端。通常可以利用 ntpdate 命令或者 ntpd 服务来同步时间。
NTP 服务的安装
[root@localhost~]# yum install -y ntp # 安装 ntp 服务
[root@localhost~]# systemctl start ntpd # 启动 ntp 服务
[root@localhost~]# systemctl enable ntpd # 将 ntp 服务加入开机自启动
NTP 的时间同步
命令格式:ntpdate [NTP服务器IP或主机名]
[root@localhost~]# ntpdate 192.168.1.1
[root@localhost~]# ntpdate ntpserver.com
定时任务里的时间同步
通常会在定时任务里添加相关命令来实现定期同步时间,在 crontab 中添加:
# 每天的 12 点同步时间
0 12 * * * /usr/sbin/ntpdate 192.168.1.1
设置文件同步时间
打开 /etc/ntp.conf,该文件为 ntp 服务的配置文件,通过操作该配置文件可以进行相关的时间同步操作。
- 在 restrict 添加授时服务网址、网段,即可接入 NTP 的地址。
- 在 server 添加 NTP 时钟源,此处以阿里云的 NTP 服务地址为例。若使用本地时钟作为时间源,只要保证本地时钟源 IP 正确即可。
- 如果 server 中存在操作系统默认的 NTP 时钟源(如 0.centos.pool.ntp.org、0.ubuntu.pool 等),需将其注释掉。
server 后可接关键字 iburst、prefer、minpoll、maxpoll 等:
- iburst:表示在启动时快速同步时间。通常情况下,NTP 客户端会与服务器建立连接并等待一段时间才能同步时间。但如果使用了 "iburst" 关键字,客户端将在启动时发送多个 NTP 请求到服务器,以加速同步时间的速率。
- prefer:表示将此服务器设置为首选服务器,如果多个服务器都可用,则 NTP 客户端将优先选择被标志为 "prefer" 的服务器进行时间同步。
restrict default nomodify notrap noquery # 关闭所有的 NTP 要求封包
restrict 127.0.0.1 # 这是允许本机查询
restrict 192.168.1.1 mask 255.255.255.0 nomodify
# 在 192.168.0.1/24 网段内的服务器就可以通过这台 NTP Server 进行时间同步了
# 要设定上层主机主要以 server 这个参数来设定,语法为:
# server [IP|HOSTName] [prefer]
server 1.pool.ntp.org prefer
# 其他设置值,以系统默认值即可
server 127.127.1.0 # local clock
fudge 127.127.1.0 stratum 10
小结
时间同步可以按场景选工具:临时对一下用 ntpdate IP;要长期守着最好起 ntpd 并 enable;想定时补一次就塞进 crontab。日常还要养成双向同步的习惯——先用 ntp 把系统时间拽准,再 hwclock --systohc 写回 BIOS,否则下次开机又漂回去。的配置文件里两处最容易出错:一是默认 pool 时钟源没注释,会优先连外网节点导致内网同步不动;二是 restrict 网段写错,客户端连上来直接被拒。
qidao123.com企服评测-应用市场 编辑提示:本文为站点编辑整理的 Linux 时间同步与 NTP 服务器设置流程,命令已按原意规范化书写;生产环境建议指向内网可控的时间源,避免依赖公网节点;本站不提供任何 NTP 安装包下载或加好友服务。 |