本文介绍如何用命令行在Linux系统下配置时区并使用NTP协议让系统时间与时区自动同步。
检查当前系统的时区设置 用date命令查看时区设置 date 命令输出结果: 2017年 12月 13日 星期三 14:50:15 EST 可以发现,我的系统被设置成了美国东部时区(Eastern Standard Time)。但我在中国,所以我需要把时间从EST更改成CST(China Standard Time)。
Debian系Linux发行版更改时区的方法 基于Debian的Linux发行版,包括Debian、Ubuntu、Linux Mint、Elementary OS等可以使用下面的命令更改时区。 sudo dpkg-reconfigure tzdata 它将在终端里打开一个会话窗口,让你选择你的地理位置。
然后选择时区所对应的城市。我选择了上海。
选择确定后,你的系统时间会立即作出改变。
适用于所有Linux发行版的更改时区的方法 以下方法适用于所有Linux发行版。首先打开一个终端窗口,输入下面的命令。 sudo ln -sf /usr/share/zoneinfo 先不要按Enter键,我们需要按一下Tab键。终端会列出许多地理位置。
在sudo ln -sf /usr/share/zoneinfo/后面输入一个地理位置,例如,我输入了Asia。然后再按一下Tab键,会列一很多个城市,输入时区所对应的城市,例如我输入了shanghai。
再按一个空格,输入/etc/localtime。所以最后你输入的命令为 sudo ln -sf /usr/share/zoneinfo/your-geographic-area/your-city /etc/localtime 现在按Enter键运行这个命令。它会创建一个软链接,将/etc/localtime文件指向对应的时区文件。你的系统时间会立即发生改变,可以用date命令查看。但有一些桌面环境,如XFCE,任务栏的时间不会改变,用户需要重新登录才能看到变化。
Real Time Clock RTC的全称是Real Time Clock,也叫做硬件时钟(hardware clock),RTC时间是由主板的CMOS电池驱动的。即使你关闭电脑,RTC时钟也会一直运转,除非CMOS电池没电了。很多情况下,RTC时间并不准确。 要查看你的RTC时间,输入以下命令 timedatectl 输出结果 Local time: Wed 2017-12-13 14:47:19 CST Universal time: Wed 2017-12-13 06:47:19 UTC RTC time: Wed 2017-12-13 06:47:19 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: yes RTC in local TZ: no 你可以看见,我的本地时间是14:49:19,但RTC时间是 06:47:19。RTC时间与本地时间不相同。有时候这会给系统的程序带来问题。RTC时间是不可靠的。 RTC时间默认没有时区。要让系统以UTC时区读取RTC时间,执行下面的命令 timedatectl set-local-rtc 0 要让系统以本地时区读取RTC时间,运行这个命令。 timedatectl set-local-rtc 1 推荐以UTC时区读取RTC时间,这可以减少麻烦。
让系统时间与本地时区时间自动同步 有时候,即使你正确设置好了时区,你的系统时间仍然有可能不准确。我们可以使用NTP协议来让系统时间与本地时区时间自动同步。 许多程序需要准确的时间才能发挥应有的功能。而NTP可以为网络上的机器提供精确的时间。NTP是一个应用层协议,使用UDP作为传输层协议。NTP时间服务器从原子钟(atomic clock)获取精确的时间。 使用Systemd的Linux系统可以用以下命令启用NTP网络时间自动同步。 timedatectl set-ntp true 这条命令会启动systemd-timesyncd服务。查看NTP状态 。 timedatectl status 输出结果: Local time: Wed 2017-12-13 15:30:35 CST Universal time: Wed 2017-12-13 07:30:35 UTC RTC time: Wed 2017-12-13 07:30:35 Time zone: Asia/Shanghai (CST, +0800) Network time on: yes NTP synchronized: yes RTC in local TZ: no 网络时间(network time)为Yes就表示启用了NTP时间同步,NTP同步(NTP synchronized)有两个状态:Yes或No。如果 Network time没有启用,那么NTP同步的状态一定为No。现在可以查看systemd-timesyncd的状态。 sudo systemctl status systemd-timesyncd 输出结果: systemd-timesyncd.service - Network Time Synchronization Loaded: loaded (/usr/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2017-12-13 15:30:29 CST; 1h 37min ago Docs: man:systemd-timesyncd.service(8) Main PID: 2243 (systemd-timesyn) Status: "Synchronized to time server 202.112.29.82:123 (0.arch.pool.ntp.org)." Tasks: 2 (limit: 512) CGroup: /system.slice/systemd-timesyncd.service └─2243 /usr/lib/systemd/systemd-timesyncd 可以发现,系统与202.112.29.82这台时间服务器同步成功了。
相关主题 |