AWS 无法通过 Cronjob 工作

Posted

技术标签:

【中文标题】AWS 无法通过 Cronjob 工作【英文标题】:AWS not working working from Cronjob 【发布时间】:2014-12-16 07:59:54 【问题描述】:

所以我有一个脚本可以每天从 AWS 下载文件并将其附加到电子表格中。为此,我设置了一个 cronjob。

脚本在我手动运行时运行良好,但在从 cronjob 运行时无法运行。

代码有一行:

aws s3 cp s3://My/files/backup/ ~/home/AnPoc/ --recursive --exclude "*.tgz" --include "*results.tgz"

在我从 cronjob 执行收到的电子邮件中,我看到以下错误消息:

./AnPoc/DayProcessing.sh: line 14: aws: command not found

我不知道为什么找不到该命令。任何帮助都会很棒。

【问题讨论】:

这该死的 $hi7 应该由 AWS 在有关为 s3 cli 创建 cron 的部分中记录。 【参考方案1】:

首先:检查可执行文件aws 在系统上的存储位置。使用这个命令:

$ which aws
/usr/bin/aws # example output, can differ in your system

现在,在脚本之前的 crontab 中放置一个名为 $PATH 的变量:

PATH=/usr/bin:/usr/local/bin

那些由: 分隔的路径定义了应该在哪里搜索可执行文件。在上面的示例中,它是/usr/bin。您必须检查 cron 作业中的所有可执行文件是否可用。

另一件事:尽量避免在 cronjobs 中使用波浪号 (~) 的路径。请改用/home/user

【讨论】:

如果你echo $PATH 你会看到你的会话已经加载了变量。但是,当您从 crontab 执行时,它不会。 保存了我的 ar$e... 必须创建我的邮件服务器的备份并将其移动到 s3 存储桶。当我手动运行我的脚本(使用 aws s3 cp ...)时,它可以正常工作,只需添加 PATH 即可使其与 cron 一起使用。我发誓,如果不是因为你的帖子,再过一年我自己也想不通。 @Ev.感谢您的评论,我什至在回答之前就注意到了。它使我通过将路径的输出重定向到文件来进行简单的测试,其余的在上面的答案中进行了解释。 如果你不知道该把 crontab 放在哪里,请看***.com/a/2409369/1386952【参考方案2】:

您应该使用aws 命令的完整路径。例如/usr/local/bin/aws

【讨论】:

@ user5735796 - 当脚本通过 cron 运行时,它会在 $PATH 变量中配置的预定义位置搜索 aws 可执行文件。如果这些位置未安装 aws,则找不到该命令。因此,要么使用完整路径来执行可执行文件,要么将您的 aws 位置添加到 $PATH 变量。【参考方案3】:

将此代码放在要执行的命令行之前 crontab -e

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

【讨论】:

感谢您的回答。解决 EKS 命令(例如 kubectl get po)的类似问题对我很有帮助【参考方案4】:

唯一对我有用的是在脚本中明确指定路径:

ROOTDIR=/home/myusername
LOGDIR=$ROOTDIR/logs
DUMPDIR=$ROOTDIR/db_backup
LOGFILE=$LOGDIR/db_backup.log

$ROOTDIR/.local/bin/aws s3 cp $DUMPDIR/myappname-`date +"%Y-%m-%d"` s3://my-bucket-name/backups/myappname-`date +"%Y-%m-%d"` --recursive >> $LOGFILE 2>&1

正如之前发帖人所说,使用which aws来查找aws的位置。

【讨论】:

【参考方案5】:

如果您的个人资料中有 aws,您还可以通过添加 . $HOME/.profile 来包含您的个人资料

* * * * * . $HOME/.profile; /path/to/command

【讨论】:

以上是关于AWS 无法通过 Cronjob 工作的主要内容,如果未能解决你的问题,请参考以下文章

无法通过 AWS Session Manager 工作获得 SSH 连接

aws elasticbeanstalk:无法通过 eb cli 部署到工作环境

在 AWS 上设置 cronjob 最经济的方法是啥? [关闭]

无法通过 PDO 连接到 AWS RDS

无法通过 cloudformation 创建具有自动缩放功能的 AWS EMR

PHP - cronjob 无法在 Ubuntu 18.04 上执行 [关闭]