【问题标题】:AWS CLI working in shell but not working in cron jobAWS CLI 在 shell 中工作但不能在 cron 作业中工作
【发布时间】:2021-04-26 21:25:05
【问题描述】:

我尝试通过 EC2 上的 cron 自动化一些工作。但是,由于错误“403 Forbidden”,aws 命令失败。当我在 shell 中运行这些代码时,这些代码运行良好。我尝试了几乎所有关于堆栈溢出的解决方案,但都没有解决问题。

测试代码很简单。 (测试将文件从 S3 复制到我的 EC2)

/2 * * * * /usr/local/bin/aws s3 cp s3://fraud-training-test/FraudAWS_v1.R /home/ubuntu

有人知道我还能做些什么来解决这个问题吗?谢谢!

到目前为止,我尝试了以下解决方案:

  1. 为 root 和我当前的用户安装和配置了 awscli;
  2. 将全局路径和主目录放在我的脚本之上

例如:

SHELL=/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  1. 尝试以当前用户和 root 用户身份安排 cron 作业,但都失败了。

以下是我从日志中得到的确切错误:

Subject: /usr/local/bin/aws s3 cp s3://fraud-training-test/FraudAWS_v1.R /r$
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
X-Cron-Env: <PATH=/usr/bin:/usr/local/bin>
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <LOGNAME=root>

fatal error: An error occurred (403) when calling the HeadObject operation: Forbidden

【问题讨论】:

  • 它似乎与正在使用的 AWS 凭证相关。 EC2 是否分配了有权访问 S3 存储桶的角色?还是您有意使用存储在本地 ~.aws/credentials 文件中的凭据?
  • 我为 ubuntu 用户和 root 用户配置并授予了访问 S3 存储桶的权限。我检查了 ~.aws/credentials 文件,该文件中的凭据对我来说是正确的。

标签: amazon-web-services amazon-ec2 cron


【解决方案1】:

问题可能是您在 crontab 中配置的用户与 AWS CLI 中配置的用户不同。

您必须将执行 crontab -e 的用户与在 aws configure 中配置的用户匹配

这在我的 Lightsail Bitnami 实例上运行良好。

【讨论】:

    【解决方案2】:

    使用 which aws 检查您的 AWS 安装路径并执行 ls -la 以了解用户权限。

    然后在crontab -e(当前用户)或sudo crontab -e(root 用户)中相应地运行它。

    它在 Ubuntu 16.04 中对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-11-22
      • 2012-02-18
      • 1970-01-01
      • 2018-08-29
      相关资源
      最近更新 更多