AWS无法在Crontab上工作

时间:2014-10-21 07:11:43

标签: shell amazon-s3 cron

所以我有一个脚本每天从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

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

5 个答案:

答案 0 :(得分:39)

首先:检查系统中存储可执行文件aws的位置。使用此命令:

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

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

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

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

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

答案 1 :(得分:23)

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

答案 2 :(得分:4)

将此代码放在命令行之前,以执行crontab -e

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

答案 3 :(得分:1)

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

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的位置。

答案 4 :(得分:0)

如果个人资料中有aws,也可以通过添加. $HOME/.profile

来包含个人资料。

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