0

0

Linux 系统时间同步方法小结

雪夜

雪夜

发布时间:2025-06-27 12:36:19

|

665人浏览过

|

来源于php中文网

原创

windows 中,系统时间的设置非常直观,通过界面操作即可完成,设置后无论重启还是关机,系统时间都会自动保存到 bios 时钟中,启动计算机时,系统会从 bios 中获取硬件时间,确保时间的连续性。然而,在 linux 中,默认情况下,系统时间和硬件时间并不会自动同步。linux 运行过程中,系统时间和硬件时间以异步方式运行,互不干扰。硬件时间依赖于 bios 电池来维持,而系统时间则由 cpu tick 维持。在系统启动时,linux 会从 bios 中读取硬件时间并设置为系统时间。

1. Linux 系统时间的设置

在 Linux 中,可以使用 date 命令来设置系统时间:

// 查看时间
[root@node1 ~]# date
Tue Feb 25 20:15:18 CST 2014

// 修改时间 [root@node1 ~]# date -s "20140225 20:16:00" # yyyymmdd hh:mm:ss Tue Feb 25 20:16:00 CST 2014

// date 命令支持多种时间格式,详细信息请查看 date --help

2. Linux 硬件时间的设置

硬件时间的设置可以使用 hwclockclock 命令。这两个命令基本相同,通常只需使用其中一个即可。clock 命令除了支持 x86 硬件体系外,还支持 Alpha 硬件体系。

// 查看硬件时间,可以使用 hwclock,hwclock --show 或 hwclock -r
[root@node1 ~]# hwclock --show
Tue 25 Feb 2014 08:21:14 PM CST -0.327068 seconds

// 设置硬件时间 [root@node1 ~]# hwclock --set --date "20140225 20:23:00" [root@node1 ~]# hwclock Tue 25 Feb 2014 08:23:04 PM CST -0.750440 seconds

3. 系统时间和硬件时间的同步

可以使用 hwclock 命令来同步系统时间和硬件时间。

// 以系统时间为基准,修改硬件时间
[root@node1 ~]# hwclock --systohc

4. 不同机器之间的时间同步

为了避免主机时间因长时间运行而产生偏差,同步时间是必要的。Linux 系统通常使用 NTP 服务器来同步不同机器的时间。一台机器可以同时作为 NTP 服务端和客户端。在生产环境中,建议使用类似 DNS 服务器的分层时间服务器来同步时间。

4.1 ntpdate 命令

使用 ntpdate 命令进行时间同步非常简单,格式如下:

1 [root@node1 ~]# ntpdate [NTP IP/hostname]
2 [root@node1 ~]# ntpdate 192.168.0.1
3 [root@node1 ~]# ntpdate cn.pool.ntp.org

ntpdate 命令:

ntpdate -u cn.pool.ntp.org:网络时间同步命令

注意:若不加上 -u 参数,会出现以下提示:no server suitable for synchronization found

-u:从 man ntpdate 中可以看出,-u 参数可以越过防火墙与主机同步。

常用 NTP 服务器:

美国:time.nist.gov

复旦:ntp.fudan.edu.cn

微软公司授时主机(美国):time.windows.com

台警大授时中心(台湾):asia.pool.ntp.org

这种同步方式只是强制将系统时间设置为 NTP 服务器的时间。如果 CPU Tick 有问题,只是治标不治本。因此,一般建议结合 cron 命令,定期进行同步。比如,在 crontab 中添加:

0 12   * /usr/sbin/ntpdate 192.168.0.1

这样,每天的 12 点整会同步一次时间,NTP 服务器为 192.168.0.1

或者将下列脚本添加到 /etc/cron.hourly/,每小时执行一次同步:

#!/bin/bash

$Id: sync-clock,v 1.6 2009/12/23 15:41:29 jmates Exp $

Use ntpdate to get rough clock sync with department of Genome Sciences

time server.

NTPDATE=/usr/sbin/ntpdate SERVER="192.168.0.1 "

if running from cron (no tty available), sleep a bit to space

out update requests to avoid slamming a server at a particular time

if ! test -t 0; then MYRAND=$RANDOM MYRAND=${MYRAND:=$$} if [ $MYRAND -gt 9 ]; then sleep echo $MYRAND | sed 's/.*\(..\)$/\1/' | sed 's/^0//' fi fi

$NTPDATE -su $SERVER

update hardware clock on Linux (RedHat?) systems

if [ -f /sbin/hwclock ]; then /sbin/hwclock --systohc fi

4.2 ntpd 服务

使用 ntpd 服务比 ntpdatecron 的组合更优,因为 ntpdate 同步时间会导致时间突变和跳跃,对依赖时间的程序和服务(如 sleeptimer 等)会造成影响。而且 ntpd 服务可以在修正时间的同时,修正 CPU Tick。因此理想的做法是在开机时使用 ntpdate 强制同步时间,在其他时间使用 ntpd 服务来同步时间。

安装 ntpd 服务:

yum install ntp -y                          # 安装 NTP 服务

获取当前系统的时区,如果时区为 (Shanghai) 则打印,如果不是则利用 || 符号

如果执行失败,则执行 || 后面的命令

timedatectl | grep 'Shanghai' || timedatectl set-timezone Asia/Shanghai # 将当前主机的时区设为 亚洲/上海 systemctl enable ntpd.service # 开机自启动 systemctl restart ntpd.service # 启动 NTP 服务守护程序 firewall-cmd --add-service=ntp firewall-cmd --add-service=ntp --permanent # 在防火墙上开放 NTP 服务

需要注意的是,ntpd 有一个自我保护机制:如果本机与上源时间相差太大,ntpd 不会进行时间同步操作。因此,新设置的时间服务器一定要先用 ntpdate 从上源取得时间初值,然后启动 ntpd 服务。ntpd 服务运行后,先是每 64 秒与上源 NTP 服务器同步一次,根据每次同步时测得的误差值经复杂计算逐步调整自己的时间,随着误差减小,逐步增加同步的间隔。每次跳动,都会重复这个调整的过程。

与内网 NTP 服务器同步,只需安装 ntpdate 软件:

yum -y install ntpdate

但需添加计划任务,让服务器周期性与内网 NTP 服务器同步:

vi  /var/spool/cron/root(或crontab -e)

在每天的 0 点 10 分、8 点 10 分、16 点 10 分与时间同步服务器进行同步并写入 BIOS:

10 0,8,16     /usr/sbin/ntpdate 10.3.5.5; /sbin/hwclock -w

如果同步不正常,可以将输出日志写入 1.txt,或查看系统日志或 /var/mail/root 系统邮件:

0 /8    *  /usr/sbin/ntpdate 10.3.5.5 >>/tmp/1.txt; /sbin/hwclock -w

也可以编辑 cat /etc/sysconfig/ntpdate 中的 SYNC_HWCLOCK=yes 来自动同步到硬件时间。

4.3. ntpd 服务的设置

ntpd 服务的相关设置文件如下:

(1)/etc/ntp.conf:这是 NTP daemon 的主要配置文件,也是 NTP 的唯一配置文件。

(2)/usr/share/zoneinfo/:在这个目录下的文件实际上是规定了各主要时区的时间配置文件,例如北京地区的时区配置文件在 /usr/share/zoneinfo/Asia/Shanghai

(3)/etc/sysconfig/clock:这个文件不包含在 NTP 的 daemon 中,因为它是 Linux 的主要时区配置文件。每次开机后,Linux 会自动读取这个文件来设置自己系统所默认要显示的时间。

(4)/etc/localtime:这个文件是“本地端的时间配置文件”。刚刚那个 clock 文件里面规定了使用的时间设置文件(ZONE)为 /usr/share/zoneinfo/Asia/Shanghai,所以这就是本地端的时间了,此时,Linux 系统就会将 Shanghai 那个文件另存为一份 /etc/localtime 文件,所以未来我们的时间显示就会以 Beijing 那个时间设置文件为准。

起航点卡销售系统
起航点卡销售系统

欢迎使用“起航点卡销售系统”销售程序:一、系统优势 1、售卡系统采取了会员与非会员相结合的销售方法,客户无需注册即可购卡,亦可注册会员购卡。 2、购卡速度快,整个购卡或过程只需二步即可取卡,让客户感受超快的取卡方式! 3、批量加卡功能。 4、取卡方式:网上支付,即时取卡 ,30秒可完成交易。 5、加密方式:MD5 32位不可倒推加密 6、防止跨站

下载

下面重点介绍 /etc/ntp.conf 文件的设置。在 NTP Server 的设置上,建议不要对 Internet 无限制地开放,尽量仅提供局域网内部的 Client 端联机进行网络校时。此外,NTP Server 总也是需要网络上面较为准确的主机来自行更新自己的时间啊,所以在我们的 NTP Server 上面也要找一部最靠近自己的 Time Server 来进行自我校正。事实上,NTP 这个服务也是 Server/Client 的一种模式。

[root@linux ~]# vi /etc/ntp.conf 

Permit all access over the loopback interface.

This could be tightened as well, but to do so would effect some of the administrative functions.

restrict 127.0.0.1 restrict ::1 restrict 172.16.18.0 mask 255.255.255.0 default nomodify notrap restrict 192.168.168.0 mask 255.255.255.0 default nomodify notrap restrict 192.168.57.0 mask 255.255.255.0 default nomodify notrap

允许目标子网同步时间请求,具有默认,不能修改,不能陷阱 等权限

Hosts on local network are less restricted.

restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

Use public servers from the pool.ntp.org project.

server 127.127.1.0 prefer # 设置NTP服务器使用 127.127.1.0 主板BIOS上的时钟为时间源,并且使用 prefer(优先)权限 server 0.centos.pool.ntp.org iburst server 1.cn.pool.ntp.org iburst # 使用公网上的 NTP 服务器作为时间源服务器 server 192.168.168.100 iburst # 使用内网上的 NTP 服务器作为时间源服务器

Enable public key cryptography.

crypto includefile /etc/ntp/crypto/pw

Key file containing the keys and key identifiers used when operating with symmetric key cryptography.

keys /etc/ntp/keys disable monitor

systemctl restart ntpd.service              # 重启 NTP 服务守护程序
timedatectl set-local-rtc false

总结一下,restrict 用来设置访问权限,server 用来设置上层时间服务器,driftfile 用来设置保存漂移时间的文件。

4.4 ntpd 服务的启动与查询

在启动 NTP 服务前,先对提供服务的这台主机手动校正一次时间(因为启动服务器后,端口会被服务端占用,就不能手动同步时间了)。

[root@node1 ~]# ntpdate cn.pool.ntp.org
25 Feb 21:10:52 ntpdate[9549]: adjust time server 202.112.31.197 offset 0.000101 sec

然后,启动 ntpd 服务:

systemctl start ntpd

查看端口(ntpd 服务使用 UDP 的 123 端口):

[root@node1 ~]# netstat -ln |grep :123
udp 0 0 12.12.12.100:123 0.0.0.0:
udp 0 0 192.168.0.100:123 0.0.0.0:
udp 0 0 172.18.226.174:123 0.0.0.0:
udp 0 0 10.10.10.100:123 0.0.0.0:
udp 0 0 127.0.0.1:123 0.0.0.0:
udp 0 0 0.0.0.0:123 0.0.0.0:
udp 0 0 fe80::225:90ff:fe98:61ff:123 :::
udp 0 0 fe80::225:90ff:fe98:61fe:123 :::
udp 0 0 fe80::202:c903:1b:afa1:123 :::
udp 0 0 ::1:123 :::
udp 0 0 :::123 :::*

如何确认我们的 NTP 服务器已经更新了自己的时间呢?

[root@node1 ~]# ntpstat
synchronised to NTP server (202.120.2.101) at stratum 4
time correct to within 557 ms
polling server every 64 s

该指令可列出NTP服务器是否与上层联机。由上述输出结果可知,时间校正约

为557*10(-6)秒,且每隔64秒会主动更新时间。

常见的错误:

unsynchronized time server re-starting

polling server every 64 s // 或者 25 Apr 15:30:17 ntpdate[11520]: no server suitable for synchronization found

其实,这不是一个错误。而是由于每次重启 NTP 服务器之后大约要 3-5 分钟客户端才能与 server 建立正常的通讯连接。当此时用客户端连接服务端就会报这样的信息。一般等待几分钟就可以了。

[root@node1 ~] # ntptrace –n
127.0.0.1:stratum 11, offset 0.000000,synch distance 0.95095
222.73.214.125:stratum 2,offset –0.000787,synch distance 0.10857
209.81.9.7:stratum 1,offset 0.000028,synch distance 0.00436,refid 'GPS'

这个指令可以列出目前NTP服务器(第一层)与上层NTP服务器(第二层)

彼此之间的关系,注意:该命令需要安装ntp-perl包

ntpq 命令:

[root@node1 ~]# ntpq -p

指令 "ntpq -p" 可以列出目前我们的 NTP 与相关的上层 NTP 的状态,以上的几个字段的意义如下:

remote:即 NTP 主机的 IP 或主机名称。注意最左边的符号,如果由 "+" 则代表目前正在作用钟的上层 NTP,如果是 "*" 则表示也有连上线,不过是作为次要联机的 NTP 主机。

refid:参考的上一层 NTP 主机的地址

st:即 stratum 阶层

when:几秒前曾做过时间同步更新的操作

poll:下次更新在几秒之后

reach:已经向上层 NTP 服务器要求更新的次数

delay:网络传输过程钟延迟的时间

offset:时间补偿的结果

jitter:Linux 系统时间与 BIOS 硬件时间的差异时间

最后提及一点,ntp 服务默认只会同步系统时间。如果想要让 ntp 同时同步硬件时间,可以设置 /etc/sysconfig/ntpd 文件。

/etc/sysconfig/ntpd 文件中,添加 SYNC_HWCLOCK=yes 这样,就可以让硬件时间与系统时间一起同步。

5. HPC 集群中时间同步示例

5.1 集群环境简介

管理节点:192.168.0.100,192.168.0.101

计算节点:192.168.0.1~192.168.0.50

I/O 节点:192.168.0.51~192.168.0.54

Internet NTP 服务器:cn.pool.ntp.org

5.2 时间同步方案设计

Linux 系统时间同步方法小结

方案详细解释:

(1)管理节点 1 作为主 NTP 服务器,跟互联网 NTP 服务器进行时间同步;管理节点 2 作为备用 NTP 服务器,也跟互联网 NTP 服务器进行时间同步。两个管理节点做 Heartbeat,设置一个漂移 IP 地址 192.168.0.103,并对 ntpd 服务进行双机高可用;

(2)集群计算节点和 IO 节点,跟管理节点的虚拟 IP 地址 192.168.0.103 通过 ntpd 服务做时间同步;

(3)所有节点,在 ntp 时间同步的同时,设置硬件时间跟系统时间一致;

(4)所有计算节点和 IO 节点开机时,通过 ntpdate 跟 192.168.0.103 进行时间同步,然后再开启 ntpd 服务。

下一篇: 在Docker中安装使用MySQL 高可用之MGC(多主同时写入)→

相关专题

更多
mysql修改数据表名
mysql修改数据表名

MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

662

2023.06.20

MySQL创建存储过程
MySQL创建存储过程

存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

245

2023.06.21

mongodb和mysql的区别
mongodb和mysql的区别

mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

281

2023.07.18

mysql密码忘了怎么查看
mysql密码忘了怎么查看

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

514

2023.07.19

mysql创建数据库
mysql创建数据库

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

253

2023.07.25

mysql默认事务隔离级别
mysql默认事务隔离级别

MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

386

2023.08.08

sqlserver和mysql区别
sqlserver和mysql区别

SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

528

2023.08.11

mysql忘记密码
mysql忘记密码

MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

599

2023.08.14

Java 桌面应用开发(JavaFX 实战)
Java 桌面应用开发(JavaFX 实战)

本专题系统讲解 Java 在桌面应用开发领域的实战应用,重点围绕 JavaFX 框架,涵盖界面布局、控件使用、事件处理、FXML、样式美化(CSS)、多线程与UI响应优化,以及桌面应用的打包与发布。通过完整示例项目,帮助学习者掌握 使用 Java 构建现代化、跨平台桌面应用程序的核心能力。

61

2026.01.14

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.2万人学习

Git 教程
Git 教程

共21课时 | 2.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号