项目场景:
linux部署Java项目时,阿里云OSS报错—RequestTimeTooSkewed
问题描述
linux部署Java项目时,阿里云OSS报错—RequestTimeTooSkewed
详细错误信息如下
[ErrorCode]: RequestTimeTooSkewed
[RequestId]: 66ED6295352E0D3332BE4CC7
[HostId]: oss-testfile-001.oss-cn-beijing.aliyuncs.com
[ResponseError]:
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>RequestTimeTooSkewed</Code>
<Message>The difference between the request time and the current time is too large.</Message>
<RequestId>66ED6295352E0D3332BE4CC7</RequestId>
<HostId>oss-testfile-001.oss-cn-beijing.aliyuncs.com</HostId>
<MaxAllowedSkewMilliseconds>900000</MaxAllowedSkewMilliseconds>
<RequestTime>2024-09-20T11:23:44.000Z</RequestTime>
<ServerTime>2024-09-20T11:55:01.000Z</ServerTime>
<EC>0002-00000504</EC>
<RecommendDoc>https://api.aliyun.com/troubleshoot?q=0002-00000504</RecommendDoc>
</Error>
原因分析:
根据错误信息:
请求时间 (RequestTime):2024-09-20T11:23:44.000Z
服务器时间 (ServerTime):2024-09-20T11:55:01.000Z
可以看出,请求时间比服务器时间早了约 31 分钟,超出了最大允许的时间偏差范围。(阿里云允许的时间偏差为15分钟)
这是由于时区设置等原因导致服务器时间与实际时间不符。
解决方案:
同步服务时间即可,同步方式如下
- 使用 date 命令手动设置时间
如果你想手动设置系统时间,可以使用 date 命令。但是需要注意,这种方式并不常见,因为时间通常应该由 NTP 服务或其他时间同步机制来保持准确。手动设置时间的命令格式如下:
sudo date -s "2024-09-20 20:03:00"
- 使用 ntpdate 命令同步网络时间
ntpdate 命令可以让你将系统时间同步到一个 NTP 时间服务器。首先需要确保 ntpdate 已经安装在你的系统上,如果没有安装,可以使用相应的包管理器进行安装。安装后,可以使用如下命令进行时间同步:
sudo ntpdate pool.ntp.org
或者指定一个具体的 NTP 服务器:
sudo ntpdate time-a.nist.gov
- 使用 timedatectl 命令启用 NTP 同步
timedatectl 是 systemd 系统中的一个工具,可以用来控制和查询系统的时间和服务。你可以使用它来开启网络时间同步:
sudo timedatectl set-ntp true
- 使用 Chrony 定期同步时间
Chrony 是一个轻量级的时间同步守护进程,可以作为客户端或服务器运行。它可以提供更精确的时间同步服务。
首先需要安装 Chrony:
对于基于 Debian 的系统(如 Ubuntu):
sudo apt-get install chrony
对于基于 Red Hat 的系统(如 CentOS、Fedora):
sudo yum install chrony
对于 Fedora 和 RHEL 8 及以上版本:
sudo dnf install chrony
安装后,编辑 /etc/chrony/chrony.conf 文件来配置 Chrony 要连接的 NTP 服务器,例如:
server pool.ntp.org iburst
保存文件后,启动 Chrony 服务并设置开机启动:
sudo systemctl start chrony
sudo systemctl enable chrony