如何在Debian9上设置时间同步

来自菜鸟教程
跳转至:导航、​搜索

介绍

准确计时已成为现代软件部署的关键组成部分。 无论是确保以正确的顺序记录日志还是正确应用数据库更新,不同步时间都可能导致错误、数据损坏和其他难以调试的问题。

Debian 9 内置了时间同步,默认情况下使用标准 ntpd 时间服务器激活,由 ntp 软件包提供。 在本文中,我们将了解一些与时间相关的基本命令,验证 ntpd 是否处于活动状态并连接到对等点,并学习如何激活备用 systemd-timesyncd 网络时间服务。

先决条件

在开始本教程之前,您需要一个 Debian 9 服务器,该服务器具有非 root、启用 sudo 的用户,如 this Debian 9 server setup tutorial 中所述。

导航基本时间命令

查找服务器时间的最基本命令是 date。 任何用户都可以键入此命令来打印出日期和时间:

date
OutputTue Sep  4 17:51:49 UTC 2018

大多数情况下,您的服务器将默认为 UTC 时区,如上面的输出中突出显示的那样。 UTC 是 协调世界时 ,即零度经度的时间。 当您的基础设施跨越多个时区时,始终使用世界时可以减少混乱。

如果您有不同的要求,需要更改时区,可以使用 timedatectl 命令进行。

首先,列出可用的时区:

timedatectl list-timezones

时区列表将打印到您的屏幕上。 您可以按 SPACE 向下翻页,按 b 向上翻页。 找到正确的时区后,记下它,然后键入 q 退出列表。

现在使用 timedatectl set-timezone 设置时区,确保将下面突出显示的部分替换为您在列表中找到的时区。 您需要使用 sudotimedatectl 进行此更改:

sudo timedatectl set-timezone America/New_York

您可以通过再次运行 date 来验证您的更改:

date
OutputTue Sep  4 13:52:57 EDT 2018

时区缩写应反映新选择的值。

现在我们知道如何检查时钟和设置时区,让我们确保我们的时间正确同步。

检查 ntpd 的状态

默认情况下,Debian 9 运行标准的 ntpd 服务器,以使您的系统时间与外部时间服务器池保持同步。 我们可以使用 systemctl 命令检查它是否正在运行:

sudo systemctl status ntp
Output● ntp.service - LSB: Start NTP daemon
   Loaded: loaded (/etc/init.d/ntp; generated; vendor preset: enabled)
   Active: active (running) since Tue 2018-09-04 15:07:03 EDT; 30min ago
     Docs: man:systemd-sysv-generator(8)
  Process: 876 ExecStart=/etc/init.d/ntp start (code=exited, status=0/SUCCESS)
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/ntp.service
           └─904 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 105:109
. . .

active (running) 状态表示 ntpd 正常启动。 要获取有关 ntpd 状态的更多信息,我们可以使用 ntpq 命令:

ntpq -p
Output     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
 0.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 1.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 2.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
 3.debian.pool.n .POOL.          16 p    -   64    0    0.000    0.000   0.000
-eterna.binary.n 204.9.54.119     2 u  240  256  377   35.392    0.142   0.211
-static-96-244-9 192.168.10.254   2 u   60  256  377   10.242    1.297   2.412
+minime.fdf.net  83.157.230.212   3 u   99  256  377   24.042    0.128   0.250
*t1.time.bf1.yah 98.139.133.62    2 u   31  256  377   11.112    0.621   0.186
+x.ns.gin.ntt.ne 249.224.99.213   2 u  108  256  377    1.290   -0.073   0.132
-ord1.m-d.net    142.66.101.13    2 u  473  512  377   19.930   -1.764   0.293

ntpq是ntpd的查询工具。 -p 标志询问有关 ntpd 连接到的 NTP 服务器(或 peers)的信息。 您的输出会略有不同,但应该列出默认的 Debian 池服务器以及其他一些服务器。 请记住,ntpd 建立连接可能需要几分钟时间。

切换到 systemd-timesyncd

可以使用 systemd 内置的 timesyncd 组件来替换 ntpd。 timesyncd 是 ntpd 的轻量级替代品,与 systemd 集成度更高。 但是请注意,它不支持作为时间服务器运行,并且它用于保持系统时间同步的技术稍微不那么复杂。 如果您正在运行复杂的实时分布式系统,您可能希望坚持使用 ntpd。

要使用 timesyncd,我们必须先卸载 ntpd:

sudo apt purge ntp

然后,启动 timesyncd 服务:

sudo systemctl start systemd-timesyncd

最后,检查服务的状态以确保它正在运行:

sudo systemctl status systemd-timesyncd
Output● systemd-timesyncd.service - Network Time Synchronization
   Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
  Drop-In: /lib/systemd/system/systemd-timesyncd.service.d
           └─disable-with-time-daemon.conf
   Active: active (running) since Tue 2018-09-04 16:14:23 EDT; 1s ago
     Docs: man:systemd-timesyncd.service(8)
 Main PID: 3399 (systemd-timesyn)
   Status: "Synchronized to time server 198.60.22.240:123 (0.debian.pool.ntp.org)."
    Tasks: 2 (limit: 4915)
   CGroup: /system.slice/systemd-timesyncd.service
           └─3399 /lib/systemd/systemd-timesyncd

我们可以使用timedatectl打印出systemd当前对时间的理解:

timedatectl
Output      Local time: Tue 2018-09-04 16:15:34 EDT
  Universal time: Tue 2018-09-04 20:15:34 UTC
        RTC time: Tue 2018-09-04 20:15:33
       Time zone: America/New_York (EDT, -0400)
 Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

这会打印出本地时间、世界时间(如果您没有从 UTC 时区切换,可能与本地时间相同)和一些网络时间状态信息。 Network time on: yes表示timesyncd开启,NTP synchronized: yes表示时间同步成功。

结论

在本文中,我们展示了如何查看系统时间、更改时区、使用 ntpd 以及切换到 systemd 的 timesyncd 服务。 如果您有比我们在这里介绍的更复杂的计时需求,您可以参考 官方 NTP 文档 ,还可以查看 NTP 池项目 ,一个全球组提供世界上大部分 NTP 基础设施的志愿者。