为Linux实例设置时间
对于许多服务器任务和进程来说,准确一致的时间参考是非常重要的。大多数系统日志包含时间戳,您可以用来确定问题发生的时间以及事件发生的顺序。如果您使用 AWS CLI 或 AWS 开发工具包从您的实例发送请求,这些工具会以您的名义签署请求。如果您的实例的日期和时间设置不正确,签名中的日期可能与请求的日期不匹配,进而导致 AWS 拒绝请求。默认情况下,Amazon Linux 实例配置网络时间协议 (NTP),系统时间与 Internet 上公用服务器的负载均衡池进行同步,设置为 UTC 时区。有关 NTP 的更多信息,请访问 http://www.ntp.org/。
任务
重要
这些过程适用于 Amazon Linux。有关其他发布版本的更多信息,请参阅其具体文档。
更改时区
默认情况下,Amazon Linux 实例设置为 UTC (协调世界时) 时区,但是您可能想将实例上的时间更改为本地时间或网络中的其他时区。
更改实例上的时区
1. 确定将在实例上使用的时区。/usr/share/zoneinfo
目录包含时区数据文件的层次结构。浏览该位置的目录结构,查找针对您的时区的文件。
[root@ip-172-31-19-71 Asia]# ls /usr/share/zoneinfo Africa Australia Cuba Etc GMT-0 Indian Kwajalein Navajo posix ROK UTC America Brazil EET Europe GMT+0 Iran Libya NZ posixrules Singapore WET Antarctica Canada Egypt GB Greenwich iso3166.tab MET NZ-CHAT PRC Turkey W-SU Arctic CET Eire GB-Eire Hongkong Israel Mexico Pacific PST8PDT UCT zone.tab Asia Chile EST GMT HST Jamaica MST Poland right Universal Zulu Atlantic CST6CDT EST5EDT GMT0 Iceland Japan MST7MDT Portugal ROC US
该位置的部分条目是目录 (如 Shanghai
),这些目录包含针对特定城市的时区文件。查找要用于实例的城市 (或时区中的一个城市)。在该示例中,您可以使用上海的时区文件 /usr/share/zoneinfo/Asia/Shanghai
。
2. 使用新时区更新 /etc/sysconfig/clock
文件。
使用您常用的文本编辑器 (如 vim 或 nano) 打开
/etc/sysconfig/clock
文件。您需要在编辑器命令中使用 sudo,因为/etc/sysconfig/clock
归root
所有。查找
ZONE
条目,将其更改为时区文件 (省略路径的/usr/share/zoneinfo
部分)。例如,若要更改为上海时区,请将ZONE
条目更改为以下内容。
[root@ip-172-31-19-71 Asia]# vi /etc/sysconfig/clock ZONE="Asia/Shanghai" UTC=true
注意:请勿将 UTC=true
条目更改为其他值。此条目用于硬件时钟;如果您在实例上设置了其他时区,则无需调整此条目。
3. 保存文件,退出文本编辑器。
在 /etc/localtime
与时区文件之间创建一个符号链接,以便实例在引用本地时间信息时找到此时区文件。
[root@ip-172-31-19-71 Asia]# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
4. 重启ntpd,以便所有服务和应用程序接受新时区信息,然后reboot生效。
[root@ip-172-31-19-71 Asia]# service ntpd start [root@ip-172-31-19-71 Asia]# reboot
验证 NTP 是否正常运行
使用 ntpstat 命令,查看实例上 NTP 服务的状态。
[root@ip-172-31-19-71 Asia]# ntpstat synchronised to NTP server (160.16.75.242) at stratum 3 time correct to within 29 ms polling server every 1024 s [root@ip-172-31-19-71 Asia]# ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== +122x215x240x52. 103.1.106.69 2 u 441 1024 377 1.940 -0.566 0.615 +v157-7-235-92.z 10.84.87.146 2 u 702 1024 377 3.007 -0.225 4.526 -45.76.107.191.v 160.16.75.242 3 u 13 1024 377 10.558 -4.916 0.158 *sv01.azsx.net 10.84.87.146 2 u 656 1024 377 2.331 -0.828 0.978
2. 使用 date 命令,查看实例上时间状态。
[root@ip-172-31-19-71 Asia]# date Sun Apr 9 15:04:38 CST 2017 root@chegva ~# > date Tue Apr 22 15:17:33 CST 2025 root@chegva ~# > timedatectl Local time: Tue 2025-04-22 15:15:51 CST Universal time: Tue 2025-04-22 07:15:51 UTC RTC time: Tue 2025-04-22 15:15:50 Time zone: Asia/Shanghai (CST, +0800) System clock synchronized: yes NTP service: active RTC in local TZ: yes
ntpq 输出结果详解
执行 ntpq -p
显示NTP对等体状态,输出列解释如下:
列名 | 说明 |
---|---|
remote | NTP服务器地址,前缀符号含义:* 当前同步源,+ 优质候选,- 被排除 |
refid | 服务器参考的上层源(IP或标识符,如.GPS ) |
st | Stratum层级(0-15,数值越小越接近原子钟) |
t | 类型:u =单播,b =广播,l =本地时钟 |
when | 上次轮询至今的秒数 |
poll | 轮询间隔(秒,通常为2的幂) |
reach | 最近8次轮询结果(八进制,377 =全部成功,0 =失败) |
delay | 网络延迟(毫秒) |
offset | 时间偏移量(毫秒,越接近0越好) |
jitter | 偏移波动值(毫秒,越小越稳定) |
示例输出分析:
ntpq -p remote refid st t when poll reach delay offset jitter ============================================================================== *ntp1.example.com 192.168.1.1 2 u 64 128 377 31.234 5.678 0.123 +ntp2.example.com .GPS. 1 u 32 256 377 28.901 -3.456 1.234 -ntp3.example.com 10.20.30.40 3 u 128 256 377 45.678 12.345 3.456
*ntp1.example.com
:当前同步源,Stratum 2,延迟31ms,偏移5.678ms,稳定性高(jitter=0.123ms)。+ntp2.example.com
:优质候选,Stratum 1(更优层级),但可能因网络延迟或优先级未被选为主源。-ntp3.example.com
:被排除的服务器,可能因高偏移(12.345ms)或网络问题。
关键指标判断
同步状态:
确认存在
*
或+
标记的服务器。reach
值应为377
(八进制,表示最近8次查询均成功)。时间质量:
offset
绝对值应小于100ms(理想值接近0)。jitter
应小于50ms,越小表明时间越稳定。网络健康:
delay
通常小于100ms,高延迟可能影响同步精度。
常见问题排查
1.NTP服务未启动:
sudo systemctl restart ntpd # 重启服务 ntpq -c rv # 显示系统变量(如时钟精度、漂移率) ntpq -c as # 查看关联状态 journalctl -u ntpd # 查看日志
2.防火墙或网络问题:
确保UDP 123端口开放:
ufw allow 123/udp # Ubuntu防火墙规则
3.配置错误:
检查
/etc/ntp.conf
的服务器地址是否可达:
ntpdate -q 0.cn.pool.ntp.org # 手动测试服务器
4.大时间偏移:
若
offset
持续超过1000ms,手动矫正时间:
ntpdate -u 0.cn.pool.ntp.org # 临时强制同步
参考: