Bootstrap

linux部署Java项目时,阿里云OSS报错“超出了最大允许的时间偏差范围“

项目场景:

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分钟)
这是由于时区设置等原因导致服务器时间与实际时间不符。


解决方案:

同步服务时间即可,同步方式如下

  1. 使用 date 命令手动设置时间
    如果你想手动设置系统时间,可以使用 date 命令。但是需要注意,这种方式并不常见,因为时间通常应该由 NTP 服务或其他时间同步机制来保持准确。手动设置时间的命令格式如下:
sudo date -s "2024-09-20 20:03:00"
  1. 使用 ntpdate 命令同步网络时间
    ntpdate 命令可以让你将系统时间同步到一个 NTP 时间服务器。首先需要确保 ntpdate 已经安装在你的系统上,如果没有安装,可以使用相应的包管理器进行安装。安装后,可以使用如下命令进行时间同步:
sudo ntpdate pool.ntp.org

或者指定一个具体的 NTP 服务器:

sudo ntpdate time-a.nist.gov
  1. 使用 timedatectl 命令启用 NTP 同步
    timedatectl 是 systemd 系统中的一个工具,可以用来控制和查询系统的时间和服务。你可以使用它来开启网络时间同步:
sudo timedatectl set-ntp true
  1. 使用 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
;