Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步
Posted 琦彦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步相关的知识,希望对你有一定的参考价值。
目录
基础认识
操作系统的时间(时钟)由以下4个部分决定:
- 时间数值
- 时间标准(本地时间/UTC/其他)
- 时区
- 夏令时(DST,Daylight Saving Time,部分适用,中国已经废止)
操作系统有两个时钟,分别是硬件时钟和系统时钟,大多数操作系统的时钟管理方式如下:
- 启动时根据硬件时钟设置系统时钟
- 维护准确的系统时钟
- 关机时根据系统时钟设置硬件时钟
常用命令
查看和修改Linux的时区
1. 查看当前时区
命令 : "date -R"2. 修改设置Linux服务器时区
timedatectl set-timezone Asia/Shanghai
timedatectl
[root@localhost ~]# timedatectl --help
timedatectl [OPTIONS...] COMMAND ...
Query or change system time and date settings.
-h --help Show this help message
--version Show package version
--no-pager Do not pipe output into a pager
--no-ask-password Do not prompt for password
-H --host=[USER@]HOST Operate on remote host
-M --machine=CONTAINER Operate on local container
--adjust-system-clock Adjust system clock when changing local RTC mode
--monitor Monitor status of systemd-timesyncd
-p --property=NAME Show only properties by this name
-a --all Show all properties, including empty ones
--value When showing properties, only print the value
Commands:
status Show current time settings
show Show properties of systemd-timedated
set-time TIME Set system time
set-timezone ZONE Set system time zone
list-timezones Show known time zones
set-local-rtc BOOL Control whether RTC is in local time
set-ntp BOOL Enable or disable network time synchronization
systemd-timesyncd Commands:
timesync-status Show status of systemd-timesyncd
show-timesync Show properties of systemd-timesyncd
list-timezones 列出系统上支持的时区
set-timezone 设定时区
set-time 设置时间
set-btp 设置同步ntp
时钟同步
用硬件时钟同步系统时钟:
hwclock --hctosys 或者 clock --hctosys
hc代表硬件时间,sys代表系统时间,即用硬件时钟同步系统时钟
用系统时钟同步硬件时钟:
hwclock --systohc或者clock --systohc
即用系统时钟同步硬件时钟
同步网络时间
同步互联网时间
ntpdate -u cn.pool.ntp.org
查看和修改Linux的时间
1. 查看时间和日期
命令 : "date"2.设置时间和日期
例如:将系统日期设定成2009年11月3日的命令命令 : "date -s 11/03/2009"
将系统时间设定成下午5点55分55秒的命令
命令 : "date -s 17:55:55"
3. 将当前时间和日期写入BIOS,避免重启后失效
命令 : "hwclock -w"
时钟--详解
硬件时钟
硬件时钟,又称实时时钟(Real Time Clock,RTC)或CMOS时钟,是独立的硬件设备(电池、电容元件等),保存的时间包括年、月、日、时、分、秒。2016年之后的UEFI固件还能保存时区和是否使用夏令时。
操作硬件时钟的工具是hwclock
,用于查询、设置硬件时钟等。
读取硬件时钟:
hwclock --show
使用系统时钟设置硬件时钟:
hwclock --systohc
更新硬件时钟后,/etc/adjtime
随之更新。
系统时钟
系统时钟,又称软件时钟,是Linux内核的一部分,包括时间、时区、夏令时(如果适用)。
系统启动时,系统时钟的初始值根据硬件时钟设定(依赖于/etc/adjtime
);
系统启动后,Linux内核利用定时器中断维护系统时钟 ,与硬件时钟无关。
操作系统时钟的工具是timedatectl
,用于查询/设置时间、设置时区、设置时间同步等。
查询时钟,其中包括本地时间、UTC时间、RTC时间、时区、系统时钟同步状态、NTP服务状态、RTC是否使用本地时间:
# timedatectl
Local time: Tue 2020-06-02 18:08:06 CST
Universal time: Tue 2020-06-02 10:08:06 UTC
RTC time: Tue 2020-06-02 10:08:06
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
设置时钟,时间格式是yyyy-MM-dd hh:mm:ss
:
# timedatectl set-time "2020-06-02 17:30:00"
# timedatectl
Local time: Tue 2020-06-02 17:30:05 CST
Universal time: Tue 2020-06-02 09:30:05 UTC
RTC time: Tue 2020-06-02 09:30:05
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: no
NTP service: inactive
RTC in local TZ: no
时间字符串为本地时间,执行命令后,本地时间、UTC时间、RTC时间会同时更新。
开启时间同步:
timedatectl set-ntp 1
时间同步
可以使用ntpd -qg
命令同步时间。
另外,Linux系统自带ntpd.service,可以使用systemctl start ntpd
命令启动NTP服务。
需要注意的是,ntpd
命令或服务仅更新本地时间和UTC时间,不更新RTC时间。 可以设置一个过去的时间,然后执行ntpd
命令校准时间,再执行timedatectl
命令查询验证。
不过这并不是什么大问题,因为关机时操作系统会根据系统时钟重设硬件时钟,下次启动时,二者恢复一致。
时间标准
两种时间标准:
- 本地时间(时区相关)
- UTC时间(时区无关)
硬件时钟所采用的时间标准是由操作系统决定的,默认情况下,Windows使用本地时间,macOS使用UTC时间,类Unix系统则各有不同。
使用UTC时间标准的操作系统通常把硬件时钟视为UTC,然后在启动时根据时区进行调整设置系统时间。
如果一台机器上安装了多个操作系统,它们都使用硬件时钟设置系统时间,建议采用统一的UTC时间标准,避免切换系统时发生时间错乱。
网络时间
ntpdate命令用于同步更新互联网时间,或者NTP服务器时间
NTP服务器【Network Time Protocol(NTP)】是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟,GPS等等)做同步化,它可以提供高精准度的时间..
ntp时钟同步服务
centos7以上版本对如下命令已经不能用:
yum install ntp
# 报如下错,
Error: Unable to find a match
# 使用如下方法 安装ntp服务
# 添加源
rpm -ivh http://mirrors.wlnmp.com/centos/wlnmp-release-centos.noarch.rpm
# 安装ntp服务
dnf install wntp
# 时间同步
ntpdate ntp1.aliyun.com
chrony时钟同步服务
适用于centos7以上版本
chrony是网络时间协议(NTP)的通用实现。它可以将系统时钟与NTP服务器,参考时钟(例如GPS接收器)以及使用手表和键盘进行的手动输入进行同步。它还可以充当NTPv4(RFC 5905)服务器并与之同行,以向网络中的其他计算机提供时间服务。
它被设计为在各种条件下均能良好运行,包括间歇性网络连接,网络严重拥塞,温度变化(普通计算机时钟对温度敏感)以及无法连续运行或在虚拟机上运行的系统。
通过Internet同步的两台计算机之间的典型精度在几毫秒内;在LAN上,精度通常为数十微秒。使用硬件时间戳记或硬件参考时钟,亚微秒精度是可能的。
chrony包括两个程序,
- chronyd一个是守护程序,可以在引导时启动,
- chronyc另一个是命令行界面程序,可以用来监视其chronyd性能并在运行时更改各种操作参数。
目前centos7已经默认安装chrony3.2作为时钟服务。
安装chronyd服务
# 操作主机:所有主机
yum -y install chrony
# 备份旧配置文件
cp /etc/chrony.conf /etc/chrony.$(date +'%s')
配置chronyd服务器
# 操作主机:chronyd服务器
# 修改服务器配置⽂件,以阿⾥云时间服务器为上游服务器
cat > /etc/chrony.conf <<_EOF
server ntp1.aliyun.com iburst
server ntp2.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
local stratum 10
logdir /var/log/chrony
_EOF
启动chrony服务
# 3. 启动chronyd
systemctl start chronyd
systemctl enable chronyd
检查阿里云时钟服务状态
[root@localhost bigunion]# chronyc sources
210 Number of sources = 2
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^* 120.25.115.20 2 10 367 410 +2787us[+3511us] +/- 18ms
^+ 203.107.6.88 2 10 377 438 -547us[ +176us] +/- 23ms
查看123和323端口是否监听
chrony配置参数说明
服务unit文件: /usr/lib/systemd/system/chronyd.service
监听端口: 323/udp,123/udp
配置文件: /etc/chrony.conf
server: 该参数可以多次用于添加时钟服务器,必须以"server "格式使用。可以添加任意个时间服务器。
stratumweight: stratumweight指令设置当chronyd从可用源中选择同步源时,每个层应该添加多少距离到同步距离。
默认情况下,CentOS中设置为0,让chronyd在选择源时忽略源的层级。
driftfile: 根据实际时间计算出计算机增减时间的比率,将它记录到一个文件中是最合理的,
在重启后为系统时钟作出补偿,甚至可能的话,会从时钟服务器获得较好的估值。
rtcsync: rtcsync指令将启用一个内核模式,在该模式中,系统时间每11分钟会拷贝到实时时钟(RTC)。
allow/deny: 这里你可以指定一台主机、子网,或者网络以允许或拒绝NTP连接到扮演时钟服务器的机器。
例:
allow 192.168.0.10
deny 192.168.2.10
cmdallow/cmddeny: 指定哪个IP地址或哪台主机可以通过chronyd使用控制命令。
bindcmdaddress : 该指令允许你限制chronyd监听哪个网络接口的命令包(由chronyc执行)。
该指令通过cmddeny机制提供了一个除上述限制以外可用的额外的访问控制等级。
例:
bindcmdaddress 127.0.0.1
bindcmdaddress ::1
makestep: chronyd将根据需求通过减慢或加速时钟,使得系统逐步纠正所有时间偏差。在某些特定情况下,系统时钟可能会漂移过快,导致该调整过程消耗很长的时间来纠正系统时钟。该指令强制chronyd在调整期大于某个阀值时步进调整系统时钟,但只有在因为chronyd启动时间超过指定限制(可使用负值来禁用限制),没有更多时钟更新时才生效。
常见参数如上,实际参数还有很多,可以在官网查看。
https://chrony.tuxfamily.org/documentation.html
备注
ntp常用服务器
国内:
cn.pool.ntp.org 中国开源免费NTP服务器
ntp1.aliyun.com 阿里云NTP服务器
ntp2.aliyun.com 阿里云NTP服务器
time1.aliyun.com 阿里云NTP服务器
time2.aliyun.com 阿里云NTP服务器
国外:
time1.apple.com 苹果NTP服务器
time2.apple.com 苹果NTP服务器
time3.apple.com 苹果NTP服务器
time4.apple.com 苹果NTP服务器
time5.apple.com 苹果NTP服务器
time1.google.com 谷歌NTP服务器
time2.google.com 谷歌NTP服务器
time3.google.com 谷歌NTP服务器
time4.google.com 谷歌NTP服务器
pool.ntp.org 开源免费NTP服务器
参考文档
- https://wiki.archlinux.org/index.php/System_time
- https://chrony.tuxfamily.org/documentation.html
以上是关于Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步的主要内容,如果未能解决你的问题,请参考以下文章
Linux: 硬件时钟, 系统时钟, 网络时钟, 时区修改和同步