【问题标题】:How to delete S3 object using cronjob如何使用 cronjob 删除 S3 对象
【发布时间】:2021-08-22 22:59:08
【问题描述】:

我的 EC2 中有一个 python 文件,它连接到 S3 并删除所有版本的对象。

我的S3delete.py

session = boto3.Session()
s3 = session.resource(service_name='s3')
bucket = s3.Bucket('mys3bucket-delete-me')
bucket.object_versions.delete()

在我的 job.sh 我把这个 python 文件称为

#!/bin/bash
python s3delete.py

使我的文件可执行chmod +x job.sh并执行./job.sh

这可以正常工作并删除我的 s3 存储桶的所有对象。

问题是当我在 crontab sudo crontab -e 中每分钟调用一次 job.sh 时,但文件没有被删除。 */1 * * * * /home/ec2-user/job.sh

请指导我怎么了?

更新

我检查了显示 Sun Jun 6 04:48:36 UTC 2021 的服务器 date 并编辑了 cron 行以将日志导出到文件中。

50 4 * * * /home/ec2-user/job.sh > /tmp/s3delete.log

2-3分钟后检查日志文件,它是空的。

我还检查了 crontab 是否正在运行 [ec2-user@server ~]$ ps aux | grep crond

ec2-user  5295  0.0  0.0 112812   968 pts/0    S+   04:55   0:00 grep --color=auto crond

【问题讨论】:

  • “不执行”是什么意思?你有错误吗?如果有,具体是什么? yoyu 是否设置了所有环境变量?在一个cronjob中,很多环境变量可能没有设置.....
  • 尝试将日志文件保存为 cron 作业的一部分,然后查看其中包含的内容,例如:python s3delete.py >/tmp/s3delete.log

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


【解决方案1】:

第一个怀疑是在 bash 中无法访问 aws 凭据。所以包括与下面给出的相同:

session = boto3.Session(
    aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,
)

S3delete.py 变成:

session = boto3.Session(aws_access_key_id=ACCESS_KEY,
    aws_secret_access_key=SECRET_KEY,
    aws_session_token=SESSION_TOKEN,)
s3 = session.resource(service_name='s3')
bucket = s3.Bucket('mys3bucket-delete-me')
bucket.object_versions.delete()

【讨论】:

  • Ali - 我提到我的 job.sh 工作正常,它调用了 s3delete.py,所以我的 EC2 正在使用具有 s3:* 权限的角色。
  • 你能检查 crond 是否使用 ps aux 运行吗? grep crond
  • [ec2-user@server ~]$ ps aux | grep crond
  • 根 2774 0.3 0.0 126392 1684 ? Ss 04:34 0:00 /usr/sbin/crond -n
  • ec2-user 2959 0.0 0.0 112812 968 pts/0 S+ 04:36 0:00 grep --color=auto crond
猜你喜欢
  • 1970-01-01
  • 2015-03-01
  • 1970-01-01
  • 2018-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-20
相关资源
最近更新 更多