linux知识点-时间相关

时区

中国跨5个时区,实际只用东八时区(utc +8)的标准时即北京时间为准。
GMT:格林尼治时间,由于时区众多,需要一个基准,早期使用GMT。
UTC:协调世界时,因为地球在椭圆轨道里的速度不均匀,自转也不规则,且正在减速。所以,格林尼治时间不再被作为标准时间,被UTC取代,以原子时秒长为基础,时刻上尽量接近于格林尼治平时。
时区:如中国比UTC快8小时,写作UTC+8,称东8区。夏威夷比UTC时间慢10小时,写作UTC-10,称西10区。

缩写 全称 中文名称 类型 UTC 偏移量
+03 +03 - UTC +03:00
+04 +04 - UTC +04:00
+05 +05 - UTC +05:00
+0530 +0530 - UTC +05:30
+06 +06 - UTC +06:00
ACDT Australian Central Daylight Time 澳大利亚中部夏令时 夏令时 UTC +10:30
ACST Australian Central Standard Time 澳大利亚中部标准时间 - UTC +09:30
… …
… …
… …
CST Central Standard Time 中部标准时间 - UTC -06:00
CST China Standard Time 中国标准时间 - UTC +08:00
CST Cuba Standard Time 古巴标准时间 - UTC -05:00
ChST Chamorro Standard Time 查莫罗标准时间 - UTC +10:00
… …
… …
… …

NTP精度

高精度的时钟同步系统广泛运用于各领域,网络上的各台计算机利用NTP服务器进行时钟调整,从而实现计算机之间的时钟同步。然而NTP授时精度有限,无法满足所有的授时需求。
一般的计算机和嵌入式设备在时钟度方面没有明确的指标要求, 时钟精度只有10-4~10-5,每天可能误差达十几秒或更多,如不校正,累积误差不可忽视。
一: 网络时间协议
NTP(Network Time Protocol)由时间协议、ICMP时间戳消息及IP时间戳选项发展而来。NTP用于将一台服务器的时间与另一服务器同步,使用层次式时间分布模型。NTP可利用冗余服务器、网络路径获得高准确性和高可靠性。
SNTP(Simple Network Time Protocol)。秒级精度的简单的网络时间协议,是NTP的一个子集,用于不需要像NTP那样高精度得场景。SNTP协议减少了网络延时对校对准确的影响,但没有冗余服务器和校正时钟频率误差功能。

二:NTP授时精度
NTP授时精度:受NTP服务器与客户端间的网络状况影响,主要取决于NTP包往返路由的延时对称程度,往返路由的延时不对称值最大不超过网络延时。一般广域网的网络延时在10 ms~500 ms之间;局域网的网络延时在计时操作系统内核处理延迟的情况下通常小于1 ms。
假定局域网内NTP延时小于1ms,理论上授时误差小于0.5 ms,但对于Windows操作系统内置的NTP客户和NTP服务,并不能达到此精度。Windows NTP时钟分辨率因操作系统和硬件不同而有所不同,时钟分辨率通常为10ms或15ms。基于Windows操作系统内置的NTP授时精度最高不超过10 ms。

三:进一步提高NTP授时精度的方法
网络延时相对较大的原因在于时间戳一般都是在应用层加盖。为减少操作系统内核处理延时的影响提高NTP授时精度,发/收NTP包时间戳应尽量接近主机真实发/收包时刻。一个办法是修改网卡驱动程序,将NTP包发/收时间戳从应用程序移至网卡驱动程序,可消除操作系统内核处理延时不确定而引入的误差。这种方法在局域网中可大幅提高NTP授时精度至μs级。
为了减少齐度引起晶振频率漂移对时钟准确度的影响,可以采用数字齐漂补偿方法,提高时钟*计时准确度。先测出工作齐度范围内齐度对应的齐漂补偿系数,工作时每隔一定时间,根据实际齐度查出对应补偿系数动态地修正时间。
时钟频率偏差和时钟分辨率低是局域网NTP授时精度不高的主要原因。

硬件和系统时钟

硬件时钟系统时钟
别名RTC、CMOS时钟、BIOS时钟内核时钟、软件时钟
物理位置主板芯片(如DS1307)操作系统内核内存中
供电方式主板电池(CR2032)系统电源(断电消失)
访问接口I/O端口或/dev/rtc设备系统调用(gettimeofday等)
更新频率1Hz(每秒1次)1000Hz+(每毫秒多次)
访问速度慢(I/O操作)快(内存读取)
时区处理存储UTC或本地时间实时转换
主要用途持久存储、启动初始化运行时计时、应用程序
  1. 启动依赖:系统时钟初始化依赖于硬件时钟
  2. 双向同步:可通过hwclock工具相互同步
  • 硬件时钟是 “持久存储”,系统时钟是 “运行缓存”
  • 在虚拟化环境中,硬件时钟可能是虚拟的
  • 时区配置不一致是常见问题
关机状态 ──硬件时钟(独立运行)──> 开机 ──读取─> 系统时钟(开始运行)
    ↑                            ↑              ↓
    │                            │          应用程序时间
    │                            │              ↓
    └──写入(同步)────────────────┘          网络时间同步(NTP)

命令:

hwclock -w 系统 → 硬件 保存当前系统时间到硬件 写入硬件
hwclock --systohc 系统 → 硬件 同上,更明确的语法 system to hardware clock
hwclock -s 硬件 → 系统 开机时初始化系统时间 设置系统时间
hwclock --hctosys 硬件 → 系统 同上,更明确的语法 hardware clock to system

NTP

主流的时钟同步服务ntpd chrony(主流) timedatectl ,一次性同步使用ntpdate

ntp安装:


# 程序包ntp,服务名ntpd,检测命令 ntpq
rpm -q ntp #查询软件包是否被安装
yum  install  ntp -y  #安装
Systemctl start ntpd ##    启动

注意许多Linux发行版(如RHEL 8/CentOS 8、SUSE)默认使用chrony作为时间服务。如果安装了ntp,请确保禁用chronyd,以避免端口冲突

ntp配置:

配置ntp.conf服务:

一个典型的/etc/ntp.conf服务端配置文件如下:

# 1. 定义上游时间源服务器
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst
# 或使用国内的阿里云NTP服务器
# server ntp.aliyun.com iburst

# 2. 定义访问控制规则(安全关键)
# 默认拒绝所有访问(包括查询、配置修改、对等体请求等)
restrict default kod nomodify notrap nopeer noquery

# 允许本机(localhost)不受限制地访问
restrict 127.0.0.1
restrict ::1

# 允许特定内网网段(例如192.168.1.0/24)同步时间,但不允许它们修改服务器配置
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

# 本地时钟作为极端情况下的后备时间源
# fudge设置层级关系。当所有外部服务器不可用时,使用本地时钟(层级为10,优先级很低)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

# 其他必要配置
# 用于记录系统时钟频率偏移的文件
driftfile /var/lib/ntp/ntp.drift

# 记录日志(可选)
# statsdir /var/log/ntpstats/
# statistics loopstats peerstats clockstats
# filegen loopstats file loopstats type day enable
# filegen peerstats file peerstats type day enable
# filegen clockstats file clockstats type day enable

restrict
作用:控制NTP服务的访问权限。这是保证服务安全的关键,必须为默认策略(通常是最严格的)和特定网络(如本地局域网)分别设置规则
ignore:忽略所有类型的NTP连接请求
nomodify:客户端不能更改服务端的时间参数,但是客户端可以通过服务端进行网络校时。
notrust :拒绝没有认证的用户端请求
noquery :客户端不能使用ntpq,ntpc来查询ntp服务器,等于不提供校对时间服务
notrap :不提供trap远程登录功能,trap服务是一种远程时间日志服务 拒绝为匹配的主机提供模式 6 控制消息陷阱服务。陷阱服务是 ntpdq控制消息协议的子系统,用于远程事件日志记录程序。
nopeer :用于阻止主机尝试与服务器对等
kod : 访问违规时发送 KoD包,向不安全的访问者发送Kiss-Of-Death报文。 restrict -6 表示IPV6地址的权限设置。

server/pool :
server指定ntp服务器的地址 格式:server [ip or hostname] [perfer],pool会自动从池中轮询多个服务器。iburst参数可加快初始同步速度
例:

server 127.127.1.0  # 将当前主机作为时间服务器 
pool 2.pool.ntp.org iburst

fudge
配置本地时钟作为备用时间源(当所有外部服务器都不可用时),设置时间服务器的层级 格式:fudge ip
[stratum int] stratum设置其层级(数字越大,优先级越低)
例:

server 127.127.1.0
fudge 127.127.1.0 stratum 10
# 注意:fudge必须和server一块用,而且是在server的下一行 stratum 0~15 0:表示顶级   10:通常用于给局域网主机提供时间服务

配置客户端

假设连接互联网额ntp

# 使用pool.ntp.org提供的公共服务器池(自动选择最优节点)
pool 2.pool.ntp.org iburst
# 或手动指定几个服务器(冗余备份,推荐至少2-3个)
server time1.cloud.tencent.com iburst
server ntp.aliyun.com iburst

# 允许本机进行任何查询
restrict 127.0.0.1
restrict ::1

# 记录系统时钟频率偏移的文件(必须有写权限)
driftfile /var/lib/ntp/ntp.drift

假设网络中有自建的NTP服务器(IP为10.0.0.1),客户端配置如下:

# 指向内部NTP服务器(可配置多个)
server 10.0.0.1 iburst
# server 10.0.0.2 iburst  # 备份服务器

# 允许本机访问
restrict 127.0.0.1

# 可选:指定发送NTP请求的源接口或IP
# ntp source-interface eth0  # 在某些系统(如SONiC)上可用[citation:4]

driftfile /var/lib/ntp/ntp.drift
#确保driftfile指定的路径(如/var/lib/ntp/)存在且ntpd进程有写入权限

如果本地时间与服务器相差太大,ntpd可能无法同步。可先用ntpdate <服务器>进行一次手动大步调整

问题排查可以使用ntpq -p,如果状态异常,如服务器状态异常(如reach值为0),请按以下步骤检查:

  1. 网络连通性:使用ping和nc -uzv <服务器> 123检查能否访问NTP服务器的UDP 123端口。
  2. 服务状态:使用systemctl status ntpd查看ntpd进程是否正常运行。
  3. 日志查询:查看系统日志(如journalctl -u ntpd)获取具体错误信息。
ntpq -p #查看当前服务器与上层 ntp 的状态
[root@TKFE-APP1 ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
+XX.X29.160.66   .GPS.            1 u  148 1024  377    0.299    0.686   0.045
-XX.X35.95.66    .GPS.            1 u  181 1024  377    0.656    0.791   1.830
*XX.X32.31.66    .GPS.            1 u  445 1024  377    0.446    0.683   0.048
-XX.X33.31.66    .GPS.            1 u  134 1024  377    0.429    0.719   0.031
+XX.X34.19.66    .GPS.            1 u  177 1024  377    0.386    0.675   0.019
remote - 本机和上层ntp的ip或主机名,“+”有连线可做候选,“*”正在使用的
refid - 更上一层的ntp地址
st - stratum的 级别
when - 多少秒前曾经同步过时间
poll - 下次更新在多少秒后
reach - 已经向上层ntp服务器要求更新的次数
delay - 网络延迟
offset - 时间补偿
jitter - 系统时间与bios时间差

ntpdate

安装

yum install ntpdate -y #命令安装

作用:
用于一次性同步系统时钟的命令行工具,它通过NTP(Network Time Protocol)协议从时间服务器获取准确的时间并立即设置系统时钟。

  1. 手动时间同步:一次性将本地系统时间与NTP服务器时间对齐
  2. 时间校正:快速纠正系统时间偏差
  3. 初始化时间:在ntpd服务启动前设置初始准确时间

# 基本语法
ntpdate [选项] NTP服务器

# 常用示例
ntpdate pool.ntp.org                    # 使用公共NTP服务器池
ntpdate 192.168.1.100                   # 使用本地NTP服务器

使用本地ntp服务校准时间
[root@TKFE-APP1 ~]# ntpdate -u 10.132.31.66
24 Oct 13:42:37 ntpdate[15580]: adjust time server XX.X32.31.66 offset 0.000594 sec

选项 作用
-u 使用非特权端口(123→1023以上端口)
-b 强制调整时间(即使偏差很大)
-s 静默模式,输出重定向到syslog
-d 调试模式,不实际设置时间
-q 查询模式,只显示时间差
-t 设置超时时间(秒)

与 ntpd 的区别
特性 ntpdate ntpd(chronyd)
工作方式 一次性同步 持续运行,渐进调整
时间调整 立即跳变 平滑调整(slew)
适用场景 手动/脚本调用 长期运行的后台服务
精度 一般 更高
资源占用 临时运行 常驻内存

优势:

  • 简单快速:单命令完成时间同步(例如可以写入定时任务)
0 0 * * 1  /usr/sbin/ntpdate -u ip  ##每周一零点零分同步一次时间,要求较高的可每小时,每分钟同步一次
  • 应急修复:快速纠正大的时间偏差
  • 脚本友好:便于自动化任务
  • 向后兼容:几乎所有Unix/Linux系统都支持

ntpstat

用于检查 NTP服务同步状态。显示系统时间是否已与 NTP 服务器同步,以及同步的精度。
例:

$ ntpstat
synchronised to NTP server (192.168.1.1) at stratum 2
   time correct to within 25 ms
   polling server every 64 s
   
   # 如果返回unsynchronised说明未同步

说明:

  • 已同步到 NTP 服务器 192.168.1.1
  • 层级(stratum): 2(值越小越接近权威时间源)
  • 时间精度: 25 毫秒以内
  • 轮询间隔: 每 64 秒同步一次

对比
ntpstat 检查NTP同步状态 简单状态报告
ntpq -p 查看NTP对等连接状态 显示所有NTP服务器状态
chronyc tracking chrony的状态信息 chrony专用的详细状态

Chrony

Chrony当前主流的时钟同步服务,与ntpd不同,它可以更快地且更准确地同步系统时钟,

简介

  • 使用ntp协议
  • 作为NTPv4(RFC 5905)服务器或对等服务器以向网络中的其他计算机提供时间服务
  • 在恶劣环境下(网络拥堵间歇性中断等)同步效率很高
  • Internet下误差几毫秒内;局域网下误差几十微秒;
  • chrony服务由chronyd和chronyc组成
    • chronyd:用户空间下的守护进程,调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿
    • chronyc:用户命令行工具,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可在一台不同的远程计算机上工作

配置:
下面配置示例,用centos7自带的chrony服务替代ntp服务作为时间服务

yum install chrony  #系统一般自带,无需手动按照
systemctl start chronyd && systemctl enable chronyd

# rpm -ql chrony
/etc/chrony.conf        #chrony的主配置文件
/usr/bin/chronyc        #chronyc是一个命令行交互式接口程序,可用于监视chronyd的性能,并在运行时更改各种操作参数。
/usr/lib/systemd/system/chronyd.service      #CentOS 7.x版本对应的unit file
/usr/sbin/chronyd              #chronyd是一个可以在启动时启动的守护程序,它既可以充当服务端进程也可以充当服务端进程

服务端与客户端配置

服务端 (NTP Server)客户端 (NTP Client)
核心功能同步外部时间源,并为内网其他设备提供时间仅向指定的时间服务器(可以是服务端)同步时间
关键配置1. 设置 server 同步上游
2. 取消 allow 注释以允许客户端
3. 添加 local stratum 10
仅设置 server 指向服务端地址
配置示例/etc/chrony.conf
server ntp.aliyun.com iburst
allow 192.168.1.0/24
local stratum 10
/etc/chrony.conf
server 192.168.1.100 iburst

常用命令
chronyc sources -v  #查看时间同步源:
chronyc -a makestep #立即手工同步
chronyc sourcestats -v   #查看时间同步源状态:

chrony和ntpd对比

chronyntp
无间断工作轮询工作
网络拥塞时正常可能会失效
与时钟同步更快、精度更高精度一般
快速适应时钟速率的突然变化适应时间较长
随系统自带使用需要手动搭建
体积小、占用内存小体积较大、内存占用率高
配置简单配置复杂
部分支持支持ntpv4的所有操作模式
不支持支持自动密钥协议(RFC 5906号)使用公钥加密对服务器进行身份验证
依赖于其他程序(例如:GPS)包括许多参考时钟的驱动程序

chrony 更适合现代动态环境,尤其是云和虚拟化场景。
ntpd 在传统高精度、稳定网络环境中仍有优势。
大多数 Linux 发行版已转向 chrony 作为默认(如 RHEL/CentOS 8+、Fedora、openSUSE)。
推荐优先考虑 chrony,除非有明确的 ntpd 依赖需求(如硬件时钟集成或遗留系统兼容)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值