You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu无法连接NTP时如何强制设置时间且保留NTP同步

无RTC设备Ubuntu 20.04手动设时间+保留NTP自动同步方案

Ubuntu 20.04默认使用systemd-timesyncd作为轻量NTP客户端,碰到的NTP开启状态下设时间报错、关NTP设时间再重启服务时间回退问题,均来自该组件的默认运行逻辑。

问题根因

  • 开启自动时间同步时timedatectl set-time返回Failed to set time: Automatic time synchronization is enabled:是组件的默认保护机制,只要NTP同步处于激活状态,就直接拦截手动时间修改操作,避免非预期时间跳变影响运行中服务。
  • 关闭NTP设完时间再重启服务立刻回退:systemd-timesyncd会把最后一次拿到的可信时间(之前成功NTP同步的时间)存在/var/lib/systemd/timesync/clock文件中,服务启动时会先比对当前系统时间和该文件记录的时间戳,如果认为当前系统时间可信度低于该文件记录值,就会直接把系统时间跳回该文件记录的旧时间。

标准操作步骤

你摸索到的更新clock文件时间戳的方法是完全符合组件设计逻辑的正规解法,不是hack操作,完整严谨的操作流程如下,全程不需要关闭NTP服务的开机自启:

  1. 临时停止运行中的timesyncd服务
sudo systemctl stop systemd-timesyncd
  1. 手动设置需要的准确系统时间,替换为你需要的实际日期时间即可
sudo timedatectl set-time "YYYY-MM-DD HH:MM:SS"
  1. 更新可信时间戳记录文件,把你刚设置的系统时间写入记录,替换旧的NTP同步时间
sudo touch /var/lib/systemd/timesync/clock

注意:如果之前手动修改过/var/lib/systemd/timesync/clock的文件权限,直接执行touch可能导致服务无法读取该文件,需要先执行以下命令恢复默认权限再更新时间戳:

sudo chown systemd-timesync:systemd-timesync /var/lib/systemd/timesync/clock
sudo chmod 0644 /var/lib/systemd/timesync/clock
  1. 重新启动timesyncd服务,保持NTP自动同步功能开启
sudo systemctl start systemd-timesyncd

操作后效果

  • 手动设置的时间立刻生效,不会出现回退
  • NTP服务保持正常运行状态,后续只要网络连通、可访问NTP服务器,会自动完成时间校准,不需要人工干预
  • 设备下次重启时,即使处于断网、无NTP服务的内网环境,服务也会读取更新后的clock文件初始化系统时间,不会跳回1970纪元时间或旧的错误时间

方案优劣势说明

该方法是当前场景下的最优方案:

  • 完全依托systemd-timesyncd原生逻辑实现,不需要修改服务默认配置、不需要关闭时间跳变保护机制,不会引入NTP同步异常的风险
  • 不需要额外安装chrony、ntpd等第三方时间同步组件,资源占用极低,适配树莓派这类低性能嵌入式设备
  • 完全匹配需求:既支持无NTP环境下手动校准时间,又保留了联网自动同步的能力,没有功能损失

内容的提问来源于stack exchange,提问作者GafferMan2112

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:06:25