Linux 时间管理

Linux下时间管理相关概念及工具。

时间有关基本概念

时间标准

标准 全称 含义
UTC 通用协调时间(Universal Time Coordinated) 全球分为24个时区,每个时区有自己的本地时间
GMT 格林威治标准时间(Greenwich Mean Time) 与UTC基本相同
CST 中国标准时间(China Standard Time) CST = UTC + 8 = GMT + 8
DST 夏令时(Daylight Saving Time) 在夏天日出较早的时候调整时间快一小时,中国不使用

硬件时间和系统时间

硬件时间:RTC (Real-Time Clock) 或CMOS时间,一般在主板上靠电池供电,计算机断电后也会继续运行,仅保存日期时间数值,不保存时区和夏令时。

系统时间:一般在计算机启动时复制RTC时间,之后做一些处理,保存时间、时区和夏令时设置。

时间管理工具 timedatectl

显示系统的当前时间和日期:

$ timedatectl
Local time: Tue 2018-11-29 20:06:13 CST
Universal time: Tue 2018-11-29 12:06:13 UTC
RTC time: Tue 2018-11-29 12:06:13
Time zone: Asia/Shanghai (CST, +0800)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no

设置日期与时间

timedatectl set-time "YYYY-MM-DD HH:MM:SS"
timedatectl set-time "YYYY-MM-DD"
timedatectl set-time "HH:MM:SS"

如果出现如下错误,则需要关闭ntp(后面提到)

Failed to set time: Automatic time synchronization is enabled

查看所有可用时区

$ timedatectl list-timezones
Africa/Abidjan
Africa/Accra
Africa/Addis_Ababa
Africa/Algiers
...

$ timedatectl list-timezones | grep -E "Asia/S.*"
Asia/Sakhalin
Asia/Samarkand
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Srednekolymsk

设置时区

timedatectl set-timezone Asia/Shanghai

设置硬件时间,硬件时间默认为UTC

timedatectl set-local-rtc 1

启用时间同步

timedatectl set-ntp yes

Chrony服务

Chrony是网络时间协议 (Network Time Protocal, NTP) 的一种实现,由两个程序组成,分别是chronydchronyc

  • chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。
  • chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

安装 Chrony

CentOS:

yum install chrony
systemctl start chronyd
systemctl enable chronyd

Ubuntu:

apt install chrony
systemctl start chronyd
systemctl enable chronyd

例子

CentOS设置系统时间为中国时区并启用时间同步

# 安装 Chrony
yum install chrony
# 启用 Chrony
systemctl start chronyd
systemctl enable chronyd
# 设置时区
timedatectl set-timezone Asia/Shanghai
# 启用NTP同步
timedatectl set-ntp yes

参考文献