前言
在Linux系统中,为了避免主机时间因为在长时间运行下所导致的时间偏差。Linux系统下,一般使用ntp服务来同步不同机器的时间。
NTP 是网络时间协议(Network Time Protocol)的简称,就是通过网络协议使计算机之间的时间同步化。
准确的系统时间是稳定服务的基础,本文介绍与时间相关的Linux操作、以及如何为自己的Linux服务器维护准确的时间。
时间基本操作
一台Linux服务器有两个时间源,一个是硬件时间,即服务器硬件CMOS维护的时间,还有一个操作系统维护的时间,前者通过hwclock命令来访问,后者则主要通过date命令来访问。
date是最常用的时间相关的命令,例如:
1 | # 获取当前时间 |
hwclock命令用于访问服务器的硬件CMOS时间,例如:
1 | # 获取系统硬件时间 |
系统时间和硬件时间的同步1
2
3
4
5# 把系统时间设置成硬件时间
hwclock --systohc
# 硬件时间设置成系统时间
hwclock --hctosys
时间相关背景
NTP 通信协议原理
首先主机启动 NTP
客户端会向 NTP 服务器发送调整时间的 message
然后 NTP server 会送出当前的标准时间给 client
client 接受来自 server 的时间后,会根据这个信息来调整自己的时间
NTP 这个 deamon 采用了 UDP 123 端口,如果有防火墙,请允许该端口访问网络
相关的命令和配置文件
/etc/ntp.conf: NTP唯一的一个设置文件,linux各版本虽然目录不同,但文件名相同。可以用which ntp.conf 或者locate ntp.conf来查找
/usr/share/zoneinfo/: 这个里面规定了这个主要时区的时间设置文件
/etc/sysconfig/clock: 这个文件是linux的主要时区设置文件,每次开机后linux会自动读取这个文件来设置系统所默认的显示时间,里面内容示例:
1
2
3
4
5
6cat /etc/sysconfig/clock
# The ZONE parameter is only evaluated by system-config-date.
# The timezone of the system is defined by the contents of /etc/localtime.
ZONE="Asia/Shanghai"
UTC=true
ARC=false/etc/localtime: 本地端时间配置文件
1
2
3
4# 设置时区
ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
# 或
cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime/bin/date: 这个是时间的修改命令,可以输出时间,也可以修改时间
/sbin/hwclock: 因为linux系统上面BIOS时间与linux系统时间是分开的,所以使用date这个指令调整了时间之后,还需要使用hwclock才能将修改过的时间写入BIOS中
/usr/sbin/ntpd: 这是NTP的daemon文件,需要启动它才能提供NTP服务,这个命令会读取/etc/ntp.conf里面的设置
/usr/sbin/ntpdate: 这是 client 用来连接 NTP Server 的主要执行文件,如果您不想启用 NTP,只想启用 NTP Client 功能的话,可以只应用此命令
/usr/sbin/ntptrace: 可以用来追踪某台时间服务器的时间对应关系
时间同步
ntpd 与 ntpdate 的区别
简单来说,ntpd 是校准时间(渐变),ntpdate 是调整时间(跳跃)
ntpdate 方式同步
1 | # 先安装 ntpdate |
ntp方式
CentOS下安装配置ntp服务的步骤如下1
2
3
4
5
6
7
8
9
10
11# 安装ntp服务的软件包
sudo yum install ntp
# 将ntp服务设置为缺省启动
sudo chkconfig ntpd on
# 修改启动参数,增加-g -x参数,允许ntp服务在系统时间误差较大时也能正常工作
sudo vi /etc/sysconfig/ntpd
# 启动ntp服务
sudo service ntpd restart
Ubuntu/Debian下安装配置ntp服务的步骤如下1
2
3
4
5
6
7
8# 安装ntp服务的软件包
sudo apt-get install ntp
# 修改启动参数,增加-g -x参数,允许ntp服务在系统时间误差较大时也能正常工作
sudo vi /etc/default/ntp
# 启动ntp服务
sudo service ntp restart
同步状态查看
ntp 服务运行后,可以通过如下命令查看与上游时间服务器的同步情况
ntpq -p
1 | ntpq -p |
推荐几个时间同步服务器
1 | cn.pool.ntp.org |