UBUNTU配置时区和NTP时间同步服务器

在Linux系统里,对于许多与系统相关的任务和进程来说,设置正确的时区非常重要。例如,cron守护进程使用系统的时区来执行cron作业,并且日志文件中的时间戳基于相同的时区。设置正确的时区后,我们最好配置一个NTP时间同步服务器,来确保系统的时间是准确的。否则,如果不同的系统时间不同步,有可能会导致程序执行异常。

在Ubuntu上,系统的时区是在安装过程中设置的,如果安装完成后发现时区不合适,可以通过命令行或GUI界面来修改。

本教程演示如何通过命令行或更改Ubuntu 18.04及之前版本的时区。同样的说明适用于任何基于ubuntu的发行版,包括Kubuntu、Linux Mint和基本操作系统。

准备工作

你需要以root或具有sudo权限的用户登录,才能更改系统的时区。

检查当前时区

在Ubuntu和大多数其他Linux发行版中,我们可以使timedatectl命令来显示和设置当前系统的时间和时区。

$timedatectl

从下面的输出中可以看到,当前时区设置为UTC:

                      Local time: Wed 2019-01-23 22:45:47 UTC
                  Universal time: Wed 2019-01-23 22:45:47 UTC
                        RTC time: Wed 2019-01-23 22:45:48
                       Time zone: Etc/UTC (UTC, +0000)
       System clock synchronized: yes
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

系统时区的配置在符号链接文件/etc/localtime,这个文件链接到/usr/share/zoneinfo目录中的一个二进制时区配置文件。我们可以用使用ls命令显示symlink指向的路径:

$ls -l /etc/localtime
lrwxrwxrwx 1 root root 25 Jan 26 00:45 /etc/localtime -> ../usr/share/zoneinfo/UTC

timedatectl 命令设置时区

在更改时区之前,需要找出想要使用的时区的长名称。时区命名约定通常使用“地区/城市”格式。

要列出所有可用的时区,我们可以列出' /usr/share/zoneinfo '目录下的文件,或者使用' timedatectl '命令。

$timedatectl list-timezones
...

Europe/Paris
Europe/Riga
Europe/Rome
Europe/Samara
...
Asia/Seoul
Asia/Shanghai
Asia/Singapore
Asia/Taipei
Asia/Tashkent
Asia/Tbilisi
Asia/Thimphu
Asia/Tokyo
...

Once you identify which time zone is accurate to your location, run the following command as sudo user:

找到了时区的正确位置名称后,以sudo用户运行以下命令:

sudo timedatectl set-timezone your_time_zone

For example, to change the system’s timezone to Europe/Rome:

比如,改变当前时区为America/Los_Angeles

sudo timedatectl set-timezone America/Los_Angeles

运行 timedatectl 显示当前的时区信息,确认修改成功:

$timedatectl
                      Local time: Mon 2021-01-25 16:44:30 PST
                  Universal time: Tue 2021-01-26 00:44:30 UTC
                        RTC time: Tue 2021-01-26 00:44:31
                       Time zone: America/Los_Angeles (PST, -0800)
       System clock synchronized: no
systemd-timesyncd.service active: yes
                 RTC in local TZ: no

通过重新配置tzdata 来更改时区

如果你运行的是旧版本的Ubuntu,并且的系统没有timedatectl,你可以通过重新配置“tzdata”来更改时区。

  1. 确定你要更改的时区名称。
  2. 使用tee命令,将新时区的名称写入/etc/timezone文件,
$echo "America/Los_Angeles" | sudo tee /etc/timezone
$Europe/Rome
  1. 使用下面的命令,使新的时区配置生效:
$ sudo dpkg-reconfigure --frontend noninteractive tzdata
Current default time zone: 'America/Los_Angeles'
Local time is now:      Thu Jan 24 00:40:48 CET 2019.
Universal Time is now:  Wed Jan 23 23:40:48 UTC 2019.

配置NTP时间同步服务器

NTP服务器(Network Time Protocol)是用来使计算机时间同步化的一种协议,NTP服务器确保不同的系统之间时间戳保持同步。

在新安装的ubuntu系统上,NTP服务器默认为ntp.ubuntu.com。查看系统日志,经常出现时间超时记录:

systemd-timesyncd[354]: Timed out waiting for reply from 91.189.94.4:123 (ntp.ubuntu.com).

要修改时间同步服务器,我们需要修改配置文件/etc/systemd/timesyncd.conf

$ vi /etc/systemd/timesyncd.conf

这个文件的默认内容是这样的:

# See timesyncd.conf(5) for details.

[Time]
#NTP=
#
#FallbackNTP=ntp.ubuntu.com
#RootDistanceMaxSec=5
#PollIntervalMinSec=32
#PollIntervalMaxSec=2048

把这个的的time部分注释去掉,设置NTP主时间同步服务器,备用服务器为FallbackNTP项,以阿里云的时间服务器为例:

[Time]
NTP=ntp1.aliyun.com
FallbackNTP=ntp2.aliyun.com,ntp3.aliyun.com,ntp4.aliyun.com
RootDistanceMaxSec=5
PollIntervalMinSec=32
PollIntervalMaxSec=2048

重启服务

service systemd-timesyncd restart

总结

这篇教程演示了如何修改Ubuntu系统的时区和NTP时间同步服务器地址。


views:5259