服务器时间漂移,如何开启Linux NTP自动同步
<h2 id="前言">前言</h2><p>在日常服务器运维中,我们往往默认服务器的时间是精准的。但最近一次偶然的 <code>date</code> 查询,让我发现——服务器时间竟然悄悄地漂移了……</p>
<p>本文记录了整个排查与解决的过程,希望能帮到遇到类似问题的朋友,也为自己留下一份系统化的成长笔记。</p>
<h2 id="发现问题">发现问题</h2>
<p>我最近在开发 StarBlog 的访问分析功能,但发现记录下来的日志似乎时间不太对</p>
<p>于是我登录到服务器,输入 <code>date</code> 命令时,发现当前时间与实际北京时间存在一定的误差。</p>
<pre><code class="language-bash"># date
Sun Apr 27 14:40:53 CST 2025
</code></pre>
<p>虽然时间差距不大,但对于需要精准时间记录的服务器来说,哪怕几分钟的误差,也可能导致日志时间错乱、计划任务异常、SSL验证失败等一系列问题。</p>
<h2 id="初步排查">初步排查</h2>
<p>为了进一步确认问题,在大模型爷爷的指导下,我使用了 <code>timedatectl status</code> 命令进行排查:</p>
<pre><code class="language-bash"># timedatectl status
Local time: Sun 2025-04-27 14:40:53 CST
Universal time: Sun 2025-04-27 06:40:53 UTC
RTC time: Sun 2025-04-27 06:50:29
Time zone: Asia/Shanghai (CST, +0800)
NTP enabled: no
NTP synchronized: no
RTC in local TZ: no
DST active: n/a
</code></pre>
<p>可以看到,虽然时区设置正确(Asia/Shanghai),但 <strong>NTP未启用(NTP enabled: no)</strong>,也<strong>未同步(NTP synchronized: no)</strong>。</p>
<p>这意味着服务器时间完全靠系统自身运行,长时间下来必然会发生漂移。</p>
<blockquote>
<p>🔎 小知识:NTP(Network Time Protocol)是一种用于网络设备间同步时间的协议,保持系统时间与世界标准时间同步,至关重要。</p>
</blockquote>
<h2 id="尝试启用ntp同步">尝试启用NTP同步</h2>
<p>于是,我尝试通过 <code>timedatectl</code> 开启NTP同步:</p>
<pre><code class="language-bash">sudo timedatectl set-ntp true
</code></pre>
<p>再次查看状态:</p>
<pre><code class="language-bash"># timedatectl status
NTP enabled: yes
NTP synchronized: no
</code></pre>
<p>虽然成功启用了NTP(enabled: yes),但同步状态依然是 <code>no</code>。</p>
<blockquote>
<p>一时间,我仿佛看见了希望的曙光,却又差点被现实的雨浇灭。🌧️</p>
</blockquote>
<p>这说明服务器虽然打开了NTP同步开关,但<strong>并未成功同步</strong>。可能是:</p>
<ul>
<li>服务器缺少对应的NTP客户端服务;</li>
<li>网络无法访问默认的时间服务器;</li>
<li>需要更长时间等待第一次同步(但这并不可靠)。</li>
</ul>
<h2 id="使用-chrony">使用 Chrony</h2>
<p>为了快速且稳定地完成时间同步,我选择安装轻量且高效的 NTP 客户端 —— <code>chrony</code>。</p>
<h3 id="安装">安装</h3>
<pre><code class="language-bash">sudo yum install chrony -y
sudo systemctl enable chronyd
sudo systemctl start chronyd
</code></pre>
<h3 id="立即同步时间">立即同步时间</h3>
<pre><code class="language-bash">sudo chronyc makestep
</code></pre>
<p>执行后,系统时间瞬间精准对齐,无需等待!</p>
<h3 id="配置国内ntp源">配置国内NTP源</h3>
<p>编辑 <code>/etc/chrony.conf</code>,将默认服务器替换为国内源</p>
<pre><code class="language-conf">server ntp.aliyun.com iburst
server ntp1.aliyun.com iburst
server cn.pool.ntp.org iburst
</code></pre>
<p>保存后,重启chronyd:</p>
<pre><code class="language-bash">sudo systemctl restart chronyd
</code></pre>
<h3 id="验证同步状态">验证同步状态</h3>
<pre><code class="language-bash">chronyc tracking
</code></pre>
<p>输出中可以看到参考时间源(Reference ID)、同步状态(stratum)等详细信息。</p>
<p>同时,<code>timedatectl status</code> 已显示:</p>
<pre><code class="language-bash">NTP enabled: yes
NTP synchronized: yes
</code></pre>
<p>至此,系统时间同步问题基本解决。</p>
<h2 id="同步硬件时钟rtc">同步硬件时钟(RTC)</h2>
<p>虽然系统时间已经同步,但检查后发现硬件时钟(RTC)仍与系统时间不一致。</p>
<p>如果不及时同步,未来服务器重启时可能又会出现时间偏差。</p>
<p>可以使用命令,将系统时间同步到RTC:</p>
<pre><code class="language-bash">sudo hwclock --systohc
</code></pre>
<p>同步完成后,验证:</p>
<pre><code class="language-bash">hwclock --show
</code></pre>
<p>确认硬件时钟与系统时间一致,真正做到开机即精准。</p>
<h2 id="小结">小结</h2>
<p>通过这次排查与解决,我收获了以下几点经验:</p>
<ul>
<li><strong>NTP同步的重要性</strong><br>
系统时间漂移会带来一连串连锁反应,必须确保服务器时间精准同步。</li>
<li><strong>排查思路的重要性</strong><br>
从表面问题出发,使用合适的工具(如 <code>timedatectl</code>)循序渐进排查,不盲目操作。</li>
<li><strong>善用高效工具(Chrony)</strong><br>
相比传统的 <code>ntpd</code>,<code>chrony</code> 更加轻量、灵活、快速,非常适合现代服务器环境。</li>
<li><strong>小问题背后的系统性成长</strong><br>
每一次排查,看似琐碎,但实质上是在打磨自己的问题分析能力和系统运维技能。</li>
</ul>
<p>🚀 如果说运维是一场长跑,那么每一次问题排查,都是在向专业稳步迈进的一小步。</p>
<p>希望这次经历,也能帮到正在成长路上的你。</p>
<h2 id="参考资料">参考资料</h2>
<ul>
<li>Chrony官方文档</li>
<li>Linux timedatectl命令详解</li>
</ul>
</div>
<div id="MySignature" role="contentinfo">
微信公众号:「程序设计实验室」
专注于互联网热门新技术探索与团队敏捷开发实践,包括架构设计、机器学习与数据分析算法、移动端开发、Linux、Web前后端开发等,欢迎一起探讨技术,分享学习实践经验。<br><br>
来源:https://www.cnblogs.com/deali/p/18849639
頁:
[1]