如何在Ubuntu 18.04上设置时间同步
介绍
准确的计时已成为现代软件部署的关键组成部分。无论是确保以正确的顺序记录日志还是正确应用数据库更新,不同步的时间都可能导致错误,数据损坏和其他难以调试的问题。
Ubuntu 18.04内置了时间同步,默认情况下使用systemd的timesyncd服务激活。在本文中,我们将介绍一些与时间相关的基本命令,验证timesyncd是否处于活动状态,并了解如何安装备用网络时间服务。
准备
在开始本教程之前,您将需要一个Ubuntu 18.04服务器,该服务器具有sudo权限的非root用户。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后再购买服务器。
导航基本时间命令
查找服务器上时间的最基本命令是date
。任何用户都可以输入此命令来打印日期和时间:
date
Tue Jul 10 14:48:52 UTC 2018
大多数情况下,您的服务器将默认为UTC时区,如上面的输出所示。UTC是世界协调时间,经度为零度的时间。当您的基础架构跨越多个时区时,始终如一地使用通用时间可以减少混淆。
如果您有不同的要求并需要更改时区,则可以使用该timedatectl
命令执行此操作。
首先,列出可用的时区:
timedatectl list-timezones
时区列表将打印到您的屏幕。您可以按SPACE
向下翻页,按b
向上翻页。找到正确的时区后,记下它,然后键入q
以退出列表。
现在用timedatectl set-timezone
设置时区,确保将下面突出显示的部分替换为您在列表中找到的时区。你需要使用timedatectl
的sudo
来进行更改:
sudo timedatectl set-timezone America/New_York
您可以再次运行date
来验证更改:
date
Tue Jul 10 10:50:53 EDT 2018
时区缩写应反映新选择的值。
现在我们知道如何检查时钟和设置时区,让我们确保我们的时间正确同步。
使用timedatectl控制时间同步
直到最近,大多数网络时间同步都由网络时间协议守护程序或ntpd处理。此服务连接到其他NTP服务器池,为其提供持续且准确的时间更新。
Ubuntu的默认安装现在使用timesyncd而不是ntpd。timesyncd连接到相同的时间服务器,并以大致相同的方式工作,但更轻量级,更集成systemd和Ubuntu的低级别工作。
我们可以通过不带参数运行timedatectl
来查询timesyncd的状态。在这种情况下你不需要使用sudo
权限:
timedatectl
Local time: Tue 2018-07-10 10:54:12 EDT
Universal time: Tue 2018-07-10 14:54:12 UTC
RTC time: Tue 2018-07-10 14:54:12
Time zone: America/New_York (EDT, -0400)
System clock synchronized: yes
systemd-timesyncd.service active: yes
RTC in local TZ: no
这将打印出本地时间,通用时间(如果您没有从UTC时区切换,可能与本地时间相同),以及一些网络时间状态信息。 System clock synchronized: yes
表示时间已成功同步,systemd-timesyncd.service active: yes
表示已启用并运行timesyncd。
如果timesyncd未激活,请使用timedatectl将其打开:
sudo timedatectl set-ntp on
再次运行timedatectl
以确认网络时间状态。这可能需要为实际同步发生的一分钟,但最终都Network time on:
与NTP synchronized:
都应该为yes
。
切换到ntpd
尽管时间同步对于大多数目的来说都很好,但是对于即使是最轻微的时间扰动非常敏感的一些应用程序也可以通过ntpd更好地服务,因为它使用更复杂的技术来不断地逐步保持系统时间的正常运行。
在安装ntpd之前,我们应该关闭timesyncd:
sudo timedatectl set-ntp no
验证timesyncd是否已关闭:
timedatectl
在输出中查找systemd-timesyncd.service active: no
。这意味着timesyncd
已经停止。我们现在可以用apt
安装ntp
包:
sudo apt update
sudo apt install ntp
ntpd将在安装后自动启动。您可以在ntpd中查询状态信息,以验证一切正常:
ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
0.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
1.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
2.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
3.ubuntu.pool.n .POOL. 16 p - 64 0 0.000 0.000 0.000
ntp.ubuntu.com .POOL. 16 p - 64 0 0.000 0.000 0.000
+ec2-52-0-56-137 216.239.35.0 2 u 16 64 1 7.872 -2.137 1.485
+66.220.10.2 129.6.15.30 2 u 12 64 1 65.204 3.740 2.686
+block.steinhoff 209.51.161.238 2 u 11 64 1 33.364 1.710 3.586
+eterna.binary.n 216.229.0.50 3 u 11 64 1 35.330 2.821 2.839
+2604:a880:800:1 209.51.161.238 2 u 14 64 1 0.394 0.386 2.462
+ec2-52-6-160-3. 130.207.244.240 2 u 11 64 1 8.150 2.050 3.053
+mx.danb.email 127.67.113.92 2 u 13 64 1 63.868 1.539 2.240
*hydrogen.consta 129.6.15.28 2 u 12 64 1 2.989 1.755 2.563
+ntp-3.jonlight. 127.67.113.92 2 u 10 64 1 64.561 2.122 3.593
+undef.us 45.33.84.208 3 u 12 64 1 33.508 1.631 3.647
+ntp-3.jonlight. 127.67.113.92 2 u 8 64 1 64.253 2.645 3.174
2001:67c:1560:8 145.238.203.14 2 u 22 64 1 71.155 -1.059 0.000
+test.diarizer.c 216.239.35.4 2 u 11 64 1 64.378 4.648 3.244
2001:67c:1560:8 145.238.203.14 2 u 18 64 1 70.744 -0.964 0.000
alphyn.canonica 132.246.11.231 2 u 17 64 1 7.973 -0.170 0.000
+vps5.ctyme.com 216.218.254.202 2 u 10 64 1 65.874 1.902 2.608
ntpq
是ntpd的查询工具。该-p
标志要求提供关于所述NTP服务器(或信息p EERS)NTPD已连接到。您的输出会略有不同,但应列出默认的Ubuntu池服务器以及其他一些服务器。请记住,ntpd建立连接可能需要几分钟时间。
结论
在本文中,我们展示了如何查看系统时间,更改时区,使用Ubuntu的默认时间同步以及安装ntpd。如果您有比我们在此处所述的更复杂的计时需求,您可以参考官方的NTP文档,还可以查看NTP池项目,这是一个全球性的志愿者团队,提供世界上大部分的NTP基础设施。
想要了解更多关于设置时间同步的相关教程,请前往腾讯云+社区学习更多知识。
参考文献:《How To Set Up Time Synchronization on Ubuntu 18.04》
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇终结(第3子篇)
- goroutine背后的系统知识
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第2子篇)
- 2017最后一天的学习-TensorFlow
- 从PowerVM,KVM到Docker:存储池的配置与调优---第一篇(第1子篇)
- 36小时,造一个亚马逊无人商店 | 实战教程+代码
- 使用Echarts来实现数据可视化
- 手把手教你用TensorFlow实现看图说话 | 教程+代码
- 自动化平台开发的几点总结
- epoll入门
- 使用Go开发一个简单的服务器程序
- [Go语言]一种用于网游服务器的支持多路复用的网络协议处理框架
- 设计包导出接口的随想
- [Go语言]实现可以枚举的map
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法