【问题标题】:AWS CLI not working with cronAWS CLI 不适用于 cron
【发布时间】:2014-10-26 01:25:30
【问题描述】:

我有这个脚本:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
SHELL=/bin/bash

# Create EBS Data snapshot
/usr/local/bin/aws ec2 create-snapshot --volume-id "vol-XXXXX" --description "test"

如果我从 shell 运行它,它可以完美运行,但对 Cron 没有任何作用。为什么?我正在使用 IAM 角色,这重要吗?

【问题讨论】:

标签: amazon-web-services cron aws-cli


【解决方案1】:

在 EC2 实例 (Ubuntu 20.04) 上使用 AWS 角色时,aws ... 在手动部署(无需 aws 配置)时开箱即用,但作为 cron 脚本不成功。 缺少的是一条路径,这是一个技巧:

/usr/local/bin/aws --version

【讨论】:

    【解决方案2】:

    您可以通过定义环境变量直接在脚本中定义凭据:

    export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE
    export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
    export AWS_DEFAULT_REGION=us-west-2
    

    https://docs.aws.amazon.com/en_us/cli/latest/userguide/cli-configure-envvars.html

    【讨论】:

      【解决方案3】:

      您应该在之前以 root 身份运行 aws configure 任务

      # aws configure
      

      如果您以 root 身份运行 crontab,请检查 HOME 目录...将其更改为

      HOME=/root
      

      在 /etc/crontab 的开头或将 /root/.aws 复制到 /.

      【讨论】:

        【解决方案4】:

        我已经用这个问题在谷歌上挖掘了几个小时,从带有 crontab 的脚本运行 AWS 命令​​应该更容易。似乎没有任何效果。

        我的脚本:

        #!/bin/bash
        backup_date=$(date +%y-%m-%d)
        zip /opt/file.zip /opt/file.db
        export AWS_ACCESS_KEY_ID=***********************
        export AWS_SECRET_ACCESS_KEY=****************************************
        export AWS_DEFAULT_REGION=us-east-1
        /usr/bin/aws s3 cp /opt/file.zip s3://bucket/backup/$backup_date.file.zip
        /usr/bin/aws s3 cp /opt/file.zip s3://bucket/backup/file.zip
        rm -f /opt/file.zip
        

        没用的东西:

        定义凭据:aws configure

        将脚本的完整路径放入crontab:0 22 * * * /opt/foo.sh &>> /tmp/foo.log

        玩弄:which aws

        答案:

        我遇到了这个答案,把它放在 crontab -e 中:

        0 0 * * * /usr/bin/env bash /opt/foo.sh &>> /tmp/foo.log
        

        【讨论】:

          【解决方案5】:

          以 root 用户身份运行 aws configure 对我没有帮助,因为我已经配置了凭据,并且脚本直接从命令行为 root 用户运行非常愉快,但仍然无法通过 cron 运行。 我收到的错误消息是;

          Unable to locate credentials. You can configure credentials by running "aws configure".
          

          帮助我的是将以下几行添加到我的 crontab 文件的顶部,以便为所有通过 cron 运行的脚本建立环境。

          SHELL=/bin/bash
          PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
          

          希望对某人有所帮助!

          【讨论】:

          • 这是唯一对我有用的解决方案,感谢您的帮助!
          【解决方案6】:

          好的,几个小时后我找到了解决方案:

          用户 root 正在运行脚本,但未为此用户配置 AWS。我只需要为 root 用户配置 AWS:

          # aws configure
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-08-10
            • 2016-11-12
            • 1970-01-01
            • 1970-01-01
            • 2022-12-17
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多