Ubuntu 系统时间同步
1.概要
问题:ubuntu 的系统时间别我的时间晚4个小时,不知道是什么原因,如何修正呢?
解决方法:修正本地时间为中国大陆(东8区)的时间,就好了。
解决问题关机步骤:
1.查看systemd-timesyncd是否安装
sudo systemctl status systemd-timesyncd
2.安装systemd-timesyncd是
sudo apt update
sudo apt install systemd-timesyncd
3.查看状态
timedatectl status
4.设定时区
sudo timedatectl set-timezone Asia/Shanghai
2.内容
1.Ubuntu 系统时间同步
在Ubuntu系统中,时间同步通常通过systemd-timesyncd服务来实现。systemd-timesyncd是一个轻量级的时间同步服务,用于将系统时钟与网络时间服务器(NTP服务器)同步,确保系统时间的准确性。以下是设置Ubuntu系统时间同步的步骤:
一、检查systemd-timesyncd服务状态
-
查看服务状态:
打开终端,输入以下命令查看systemd-timesyncd服务的状态:
sudo systemctl status systemd-timesyncd
如果服务正在运行,输出中会显示
active (running)
。 -
启动服务:
如果服务未运行,可以使用以下命令启动它:
sudo systemctl start systemd-timesyncd
-
设置开机自启:
为了在系统启动时自动启动systemd-timesyncd服务,可以使用以下命令:
sudo systemctl enable systemd-timesyncd
二、配置NTP服务器
Ubuntu默认使用time.windows.com和time.google.com等公共NTP服务器进行时间同步。如果您希望使用其他NTP服务器,可以编辑配置文件来指定。
-
编辑配置文件:
使用文本编辑器打开
/etc/systemd/timesyncd.conf
文件,例如使用nano
编辑器:sudo nano /etc/systemd/timesyncd.conf
-
修改NTP服务器地址:
在文件中找到
[Time]
部分,添加或修改NTP=
行,指定您希望使用的NTP服务器地址。例如:[Time] NTP=ntp.ubuntu.com
您还可以指定备用NTP服务器,使用
FallbackNTP=
选项,例如:FallbackNTP=ntp1.ubuntu.com ntp2.ubuntu.com ntp3.ubuntu.com
-
保存并退出:
修改完成后,保存文件并退出编辑器。
-
重启服务:
修改配置后,需要重启systemd-timesyncd服务以使更改生效:
sudo systemctl restart systemd-timesyncd
三、验证时间同步
-
查看同步状态:
使用以下命令查看时间同步的状态:
timedatectl status
在输出中,您应该能够看到
NTP synchronized: yes
,表示时间同步已成功配置。 -
检查当前时间:
使用
date
命令查看当前系统时间,确保时间准确:date
四、注意事项
-
防火墙设置:确保防火墙设置允许NTP流量(UDP端口123)。如果您使用的是
ufw
防火墙,可以使用以下命令允许NTP流量:sudo ufw allow 123/udp
-
网络连接:确保您的系统能够访问外部NTP服务器。
-
权限:修改系统服务配置和重启服务通常需要超级用户权限,因此请确保您以
sudo
或root
用户身份执行上述命令。
通过以上步骤,您可以在Ubuntu系统中成功设置时间同步,确保系统时间始终保持准确。
2.未找到systemd-timesyncd.service单元。
topeet@topeet:~$ sudo systemctl status systemd-timesyncd[sudo] topeet 的密码: Unit systemd-timesyncd.service could not be found.
topeet@topeet:~$ sudo systemctl status systemd-timesyncd[sudo] 输入topeet的密码:未找到systemd-timesyncd.service单元。
如果在运行 sudo systemctl status systemd-timesyncd
时出现 Unit systemd-timesyncd.service could not be found
的错误消息,这通常意味着系统中没有安装或启用 systemd-timesyncd
服务。以下是一些可能的解决步骤:
1. 检查系统版本
systemd-timesyncd
是 systemd 的一部分,通常在较新的 Linux 发行版中默认包含。如果你的系统版本较旧,可能没有这个服务。请确保你的系统运行的是支持 systemd
的较新版本。
2. 检查是否已安装 systemd
确保系统中安装了 systemd。你可以通过以下命令检查 systemd 的版本:
systemd --version
如果没有安装 systemd,或者版本非常旧,可能需要升级或安装 systemd。
3. 安装 systemd-timesyncd
在某些情况下,即使 systemd 已安装,systemd-timesyncd
可能没有默认启用或安装。你可以尝试安装相关软件包:
-
在基于 Debian 的系统(如 Ubuntu)上:
sudo apt update sudo apt install systemd-timesyncd
-
在基于 Red Hat 的系统(如 CentOS、Fedora)上:
sudo yum install systemd-timesyncd
或者在新版本的 Fedora 上:
sudo dnf install systemd-timesyncd
4. 启用和启动服务
安装后,确保服务被启用并启动:
sudo systemctl enable systemd-timesyncd
sudo systemctl start systemd-timesyncd
5. 检查服务状态
再次尝试检查服务状态:
sudo systemctl status systemd-timesyncd
6. 检查日志
如果服务仍然无法找到或启动失败,可以查看系统日志以获取更多信息:
sudo journalctl -xe
这将显示详细的错误信息,有助于诊断问题。
7. 使用其他时间同步工具
如果 systemd-timesyncd
不可用或不合适,你可以考虑使用其他时间同步工具,如 ntpd
或 chrony
。这些工具在大多数 Linux 发行版中都可以使用,并且提供了类似的功能。
通过以上步骤,你应该能够解决 systemd-timesyncd
服务无法找到的问题。如果问题仍然存在,可能需要进一步检查系统配置或考虑其他时间同步方案。
3.systemd-timesyncd服务安装完了,也启动了,时间就会自动更新吗
在Ubuntu系统中,安装并启动systemd-timesyncd
服务后,系统时间通常会自动更新。不过,要确保时间自动更新功能正常工作,还需要注意以下几点:
一、确认服务状态
-
检查服务是否运行:
使用以下命令查看
systemd-timesyncd
服务的状态:sudo systemctl status systemd-timesyncd
确保输出中包含
active (running)
,表示服务正在运行。 -
确保服务开机自启:
使用以下命令设置服务在系统启动时自动启动:
sudo systemctl enable systemd-timesyncd
二、验证时间同步
-
查看时间同步状态:
使用
timedatectl
命令查看系统时间同步的状态:timedatectl status
在输出中,关注
NTP synchronized
字段。如果显示为yes
,则表示系统时间已经与NTP服务器同步。 -
手动同步时间(可选):
如果需要立即同步时间,可以重启
systemd-timesyncd
服务:sudo systemctl restart systemd-timesyncd
三、配置NTP服务器(可选)
systemd-timesyncd
服务默认会使用公共的NTP服务器进行时间同步。如果您希望使用特定的NTP服务器,可以编辑配置文件/etc/systemd/timesyncd.conf
。
-
打开配置文件:
使用文本编辑器打开配置文件,例如使用
nano
:sudo nano /etc/systemd/timesyncd.conf
-
修改NTP服务器地址:
在文件中找到
[Time]
部分,然后添加或修改NTP=
选项,指定您希望使用的NTP服务器地址。例如:[Time] NTP=ntp.example.com
-
保存并退出:
修改完成后,保存文件并退出编辑器。
-
重启服务:
修改配置后,需要重启
systemd-timesyncd
服务以使更改生效:sudo systemctl restart systemd-timesyncd
四、注意事项
-
网络连接:
确保系统能够访问外部网络,以便
systemd-timesyncd
服务能够连接到NTP服务器。 -
防火墙设置:
确保防火墙设置允许NTP流量(UDP端口123),以便
systemd-timesyncd
服务能够正常访问NTP服务器。 -
时间同步频率:
systemd-timesyncd
服务会定期与NTP服务器同步时间,但具体频率取决于网络状况和配置。如果需要更频繁的时间同步,可以考虑调整配置文件中的相关选项,但通常默认设置已经足够满足大多数需求。
总结来看,安装并启动systemd-timesyncd
服务后,系统时间通常会自动更新。但为了确保时间同步功能正常工作,还需要注意上述几点事项。
4.本地时间和世界时间相同,均为 UTC 时间。
topeet@topeet:~$ timedatectl status Local time: 六 2025-03-08 01:02:19 UTC Universal time: 六 2025-03-08 01:02:19 UTC RTC time: 六 2025-03-08 01:02:19 Time zone: Etc/UTC (UTC, +0000)System clock synchronized: yes NTP service: active RTC in local TZ: no
这里提供了一些关键的时间设置和同步信息:
- 本地时间和世界时间相同,均为 UTC 时间。
- 硬件时钟时间也显示了当前的时间。
- 时区设置为 UTC,没有时区偏移。
- 系统时钟已同步表示系统时间是通过网络时间协议(NTP)或其他方式同步的。
- NTP 服务处于活跃状态,说明有时间同步服务在运行。
- 硬件时钟使用本地时区为否,表示硬件时钟设置为 UTC 时间,而不是本地时区时间。
从你提供的 timedatectl status
输出信息来看,systemd-timesyncd
服务已经成功运行,并且系统时钟已经与 NTP 服务器同步。以下是对输出信息的详细解释:
- Local time:
- 显示的是本地时间,但由于你的时区设置为
Etc/UTC
,所以本地时间与 UTC 时间相同。
- 显示的是本地时间,但由于你的时区设置为
- Universal time:
- 显示的是 UTC 时间,与本地时间一致,因为你的时区设置为 UTC。
- RTC time:
- 显示的是硬件实时时钟(RTC)的时间。通常,RTC 时间应该在系统启动时与系统时间同步。
- Time zone:
- 当前时区设置为
Etc/UTC
,即协调世界时(UTC)。如果你希望使用其他时区,比如中国大陆的时间(东八区),你需要将时区设置为Asia/Shanghai
。
- 当前时区设置为
- System clock synchronized:
- 显示为
yes
,表示系统时钟已经与 NTP 服务器同步。
- 显示为
- NTP service:
- 显示为
active
,表示systemd-timesyncd
服务正在运行。
- 显示为
- RTC in local TZ:
- 显示为
no
,表示硬件实时时钟(RTC)不存储在本地时区,而是使用 UTC。这是推荐的做法,因为可以避免在跨时区移动时出现问题。
- 显示为
如果需要更改时区
如果你希望将时区更改为 Asia/Shanghai
,可以使用以下命令:
sudo timedatectl set-timezone Asia/Shanghai
执行此命令后,Local time
将显示为东八区时间,而 Universal time
将继续显示 UTC 时间。
总结
- 你的系统时间已经与 NTP 服务器同步,
systemd-timesyncd
服务运行正常。 - 如果你需要更改时区,可以使用
timedatectl set-timezone
命令。 - RTC 时间设置为 UTC 是推荐的做法,可以避免时区变化带来的问题。
如果你还有其他问题或需要进一步的帮助,请随时告知。
3.关联链接
4.关联知识
1.Ubuntu 系统时间
在Ubuntu系统中,管理时间涉及设置时区、查看和修改系统时间,以及确保时间同步等几个方面。以下是对Ubuntu系统时间的详细说明:
一、设置时区
-
Ubuntu 20.04及以上版本:
-
使用命令行设置时区:
sudo timedatectl set-timezone Asia/Shanghai
这条命令将时区设置为上海时间(东八区)。
-
使用图形界面设置时区:
打开系统设置,找到“日期与时间”选项,然后选择正确的时区。
-
-
Ubuntu 16.04版本:
-
使用命令行设置时区:
sudo dpkg-reconfigure tzdata
按照提示选择时区。
-
使用图形界面设置时区的方法与Ubuntu 20.04及以上版本相同。
-
二、查看和修改系统时间
-
查看当前时间:
打开终端,输入以下命令:
date
这将显示当前的日期和时间。
-
修改系统时间:
-
使用
date
命令临时修改时间(重启后会失效):sudo date -s "YYYY-MM-DD HH:MM:SS"
例如,要将时间设置为2025年3月8日8点50分49秒,可以输入:
sudo date -s "2025-03-08 08:50:49"
-
使用
timedatectl
命令修改时间(重启后不会失效):sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
例如:
sudo timedatectl set-time "2025-03-08 08:50:49"
-
-
将系统时间写入硬件时钟:
使用
hwclock
命令将系统时间写入硬件时钟,以避免重启后时间设置失效:sudo hwclock --systohc
三、确保时间同步
Ubuntu系统默认使用systemd-timesyncd
服务进行时间同步。该服务会定期从网络上的NTP服务器获取时间,并调整系统时间。
-
查看
systemd-timesyncd
服务状态:sudo systemctl status systemd-timesyncd
如果服务未运行,可以使用以下命令启动并启用它:
sudo systemctl start systemd-timesyncd sudo systemctl enable systemd-timesyncd
-
配置NTP服务器:
systemd-timesyncd
服务默认使用公共NTP服务器进行时间同步。如果您希望使用特定的NTP服务器,可以编辑配置文件/etc/systemd/timesyncd.conf
。找到[Time]
部分,然后添加或修改NTP=
选项,指定您希望使用的NTP服务器地址。 -
验证时间同步:
使用以下命令查看时间同步的状态:
timedatectl status
在输出中,如果看到
NTP synchronized: yes
,则表示时间同步已成功配置。
四、注意事项
- 修改系统时间可能需要管理员权限,因此请确保以
sudo
或root
用户身份执行相关命令。 - 在虚拟机环境中,可能需要关闭与主机的时间同步功能,然后再启用
systemd-timesyncd
服务,以避免时间同步冲突。 - 确保防火墙设置允许NTP流量(UDP端口123),以便
systemd-timesyncd
服务能够正常访问NTP服务器。
通过以上步骤,您可以轻松地在Ubuntu系统中设置、查看和修改时间,并确保系统时间与网络时间服务器保持同步。
2.systemd-timesyncd
systemd-timesyncd 是一个用于跨网络同步系统时钟的守护服务,它通过实现 SNTP(Simple Network Time Protocol,简单网络时间协议)客户端功能,从远程服务器查询时间并同步到本地时钟。
以下是关于 systemd-timesyncd 的详细介绍:
一、功能特点
- 轻量级和简单:
- 与完整的 NTP(Network Time Protocol,网络时间协议)实现相比,systemd-timesyncd 仅实现了客户端功能,摒弃了 NTP 的复杂性。
- 它专注于从远程服务器查询时间并同步到本地时钟,适合大多数不需要提供 NTP 服务的场景。
- 与 systemd 集成:
- systemd-timesyncd 是 systemd 的一部分,与 systemd 网络服务(networkd)挂钩,仅在网络连接可用时才工作。
- 它以最小特权运行,确保安全性。
- 自动保存和恢复时间:
- 每次同步时钟后,systemd-timesyncd 会将本地时间保存到磁盘。
- 在系统启动时,它会使用保存的时间来尽可能修正系统时钟,确保时间单调递增,即使系统缺少电池缓冲的 RTC(实时时钟)芯片。
二、配置与使用
-
配置文件:
- systemd-timesyncd 的配置文件通常位于
/etc/systemd/timesyncd.conf
。 - 可以通过编辑该文件来配置 NTP 服务器、备用 NTP 服务器、最大根距离(时间同步误差)等参数。
示例配置:
[Time] NTP=ntp.aliyun.com ntp1.tencent.com FallbackNTP=ntp.ubuntu.com RootDistanceMaxSec=5
NTP
:指定一个或多个 NTP 服务器,以空格分隔。FallbackNTP
:指定备用 NTP 服务器,当主 NTP 服务器不可用时使用。RootDistanceMaxSec
:设置最大时间同步误差,单位为秒。
- systemd-timesyncd 的配置文件通常位于
-
启动和停止服务:
-
使用以下命令启动和停止 systemd-timesyncd 服务:
sudo systemctl start systemd-timesyncd sudo systemctl stop systemd-timesyncd
-
要设置服务在开机时自动启动,可以使用:
sudo systemctl enable systemd-timesyncd
-
-
查看服务状态:
-
使用以下命令查看 systemd-timesyncd 服务的状态:
sudo systemctl status systemd-timesyncd
-
-
验证时间同步:
-
使用
timedatectl
命令查看系统时钟是否与互联网时间服务器同步:timedatectl status
-
如果
System clock synchronized
显示为yes
,则表示时间同步成功。
-
三、应用场景
- 嵌入式设备和无 RTC 系统:
- systemd-timesyncd 特别适合嵌入式设备(如 Raspberry Pi)和无 RTC 系统的场景,因为它能够在系统启动时自动调整时间,确保时间的单调递增。
- 桌面和服务器环境:
- 在桌面环境和大多数服务器环境中,systemd-timesyncd 可以作为默认的时间同步解决方案,提供简单、可靠的时间同步功能。
四、注意事项
- 防火墙和网络设置:
- 确保防火墙允许 UDP 123 端口的流量,以便 systemd-timesyncd 能够与 NTP 服务器通信。
- 在某些网络环境(如虚拟机环境)中,可能需要关闭与主机的时间同步功能,再启用 systemd-timesyncd。
- 写入限制:
- systemd-timesyncd 每次同步或每隔一定时间(默认 60 秒)会写入本地文件
/var/lib/systemd/timesync/clock
。在只读根分区或尝试减少 SD 卡写入量的场景中,这可能会造成问题。可以通过调整配置参数来减少写入次数。
- systemd-timesyncd 每次同步或每隔一定时间(默认 60 秒)会写入本地文件
- 精度要求:
- 如果需要高精度的时间同步(例如,金融、科学计算等领域),建议使用 chrony 或 NTP 服务,因为它们提供了更全面的 NTP 支持和更高的精度。
五、总结
systemd-timesyncd 是一个轻量级、易于配置的时间同步服务,适合大多数不需要提供 NTP 服务的场景。它通过实现 SNTP 客户端功能,从远程服务器查询时间并同步到本地时钟,确保系统时间的准确性和单调递增。在实际应用中,可以根据具体需求和环境选择合适的时间同步解决方案。
2.sudo systemctl status systemd-timesyncd
sudo systemctl status systemd-timesyncd
是一条用于检查 systemd-timesyncd
服务状态的命令。
命令解析:
sudo
:以超级用户权限运行命令。systemctl
:用于控制和管理 systemd 服务的工具。status
:查看服务的当前状态。systemd-timesyncd
:这是 systemd 提供的一个轻量级 NTP(网络时间协议)客户端服务,用于自动同步系统时间。
输出内容:
运行该命令后,你会看到类似以下的输出:
● systemd-timesyncd.service - System Time Synchronization Daemon
Loaded: loaded (/lib/systemd/system/systemd-timesyncd.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-10-30 10:00:00 UTC; 5min ago
Docs: man:systemd-timesyncd.service(8)
Main PID: 1234 (systemd-timesyn)
Status: "Synchronized to time server 192.168.1.1:123 (NTP server)"
Tasks: 2 (limit: 4915)
Memory: 1.8M
CPU: 15ms
CGroup: /system.slice/systemd-timesyncd.service
└─1234 /lib/systemd/systemd-timesyncd
输出字段说明:
Loaded
:表示服务的加载状态,以及是否启用(enabled)。Active
:显示服务当前是否正在运行(running),以及运行了多长时间。Main PID
:服务的主进程 ID。Status
:显示时间同步服务的详细状态,比如当前是否已同步到某个时间服务器。Tasks
:当前服务占用的任务数。Memory
和CPU
:显示该服务占用的内存和 CPU 资源。CGroup
:服务运行的控制组信息。
常见状态:
active (running)
:表示服务正在正常运行,时间同步功能无问题。inactive (dead)
:服务未启动,可能需要检查配置或手动启动。failed
:服务启动失败,通常是由于网络问题或配置错误导致。
如果服务未运行,可以尝试以下操作:
- 启动服务:
sudo systemctl start systemd-timesyncd
- 设置开机自启:
sudo systemctl enable systemd-timesyncd
- 查看日志以排查问题:
sudo journalctl -u systemd-timesyncd
通过这条命令,你可以快速了解 systemd-timesyncd
的运行状况,确保系统时间能够正确同步。
3.systemd-timesyncd 服务
systemd-timesyncd
是 systemd 提供的一个轻量级的时间同步服务。它使用网络时间协议(NTP)来保持系统时间与网络时间服务器的一致性。与完整的 NTPd 服务相比,systemd-timesyncd
更加简单和高效,适合大多数桌面和服务器环境。
systemd-timesyncd 的特点
-
轻量级:
systemd-timesyncd
是一个轻量级的服务,占用的资源较少,适合在资源有限的环境中运行。 -
简单易用:它集成了 systemd 的配置和管理工具,使用
systemctl
命令即可轻松管理。 -
安全性:
systemd-timesyncd
使用的是 NTP 的简化版本,减少了配置复杂性,同时也提供了一定的安全性。 -
自动化:服务在系统启动时自动启动,并在后台持续运行,确保系统时间始终准确。
如何管理和配置 systemd-timesyncd
1. 检查服务状态
要查看 systemd-timesyncd
的运行状态,可以使用以下命令:
sudo systemctl status systemd-timesyncd
2. 启用和启动服务
如果服务未启用或未运行,可以使用以下命令启用并启动它:
sudo systemctl enable systemd-timesyncd # 设置开机自启
sudo systemctl start systemd-timesyncd # 立即启动服务
3. 配置时间服务器
systemd-timesyncd
的配置文件通常位于 /etc/systemd/timesyncd.conf
。你可以编辑这个文件来指定时间服务器。默认情况下,它会使用 systemd 提供的公共 NTP 服务器池。
配置文件中的主要选项包括:
NTP=
:指定 NTP 服务器地址,可以是多个地址,用空格分隔。FallbackNTP=
:在主服务器不可用时使用的备用服务器。
编辑完成后,重启服务以应用更改:
sudo systemctl restart systemd-timesyncd
4. 查看日志
如果服务出现问题,可以查看系统日志以获取更多信息:
sudo journalctl -u systemd-timesyncd
5. 验证时间同步
可以使用 timedatectl
命令来验证系统时间是否已同步:
timedatectl
输出中会显示当前系统时间、本地时间、UTC 时间以及 NTP 同步状态等信息。
总结
systemd-timesyncd
是一个方便且高效的时间同步服务,适合大多数 Linux 系统使用。通过简单的配置和管理,你可以确保系统时间的准确性,这对于日志记录、安全认证和许多其他系统功能都是至关重要的。如果你的系统没有安装或启用 systemd-timesyncd
,可以考虑按照上述步骤进行安装和配置。
4.Local time 和Universal time 什么差别
Local time(本地时间)和Universal time(世界时,通常指协调世界时UTC)之间存在以下主要差别:
定义与基准
-
Local time(本地时间):
- 是指根据特定地理位置(时区)所确定的时间。
- 每个时区都有一个本地时间,它反映了该时区与协调世界时(UTC)的偏差。
- 例如,中国大陆的本地时间是东八区时间,比UTC快8小时。
-
Universal time(世界时,通常指UTC):
- 是一种全球统一的时间标准,基于国际原子时(TAI),并通过添加闰秒与地球自转保持同步。
- UTC是Coordinated Universal Time(协调世界时)的简称,是目前全球通用的时间标准。
- UTC时间不受地理位置或时区的影响,全球统一。
用途与特性
-
Local time(本地时间):
- 主要用于日常生活和当地活动的时间安排。
- 随着地理位置的变化,本地时间也会相应变化。
- 例如,在旅行时,从一个时区到另一个时区,本地时间会发生改变。
-
Universal time(世界时,UTC):
- 主要用于国际交流、科学研究、航空航天等领域。
- UTC时间全球统一,不随地理位置变化而变化。
- 它为国际通信、导航、时间同步等提供了统一的时间基准。
显示与转换
-
Local time(本地时间):
- 在大多数设备和系统中,默认显示的是本地时间。
- 可以通过时区转换工具或命令将本地时间转换为其他时区的时间。
-
Universal time(世界时,UTC):
- 在需要全球统一时间基准的场合,如国际会议、科学研究等,会明确使用UTC时间。
- 可以通过时区转换工具或命令将UTC时间转换为本地时间。
示例
-
假设当前UTC时间为2025年3月8日01:02:19。
- 在中国大陆(东八区),本地时间为2025年3月8日09:02:19。
- 在英国伦敦(零时区),本地时间为2025年3月8日01:02:19(与UTC时间相同)。
结论
Local time和Universal time的主要差别在于定义基准、用途特性以及显示与转换方式。Local time是根据特定地理位置(时区)确定的时间,而Universal time(UTC)是一种全球统一的时间标准。在日常生活和当地活动中,我们主要使用本地时间;而在需要全球统一时间基准的场合,则使用UTC时间。