所以我有一个脚本每天从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
我不知道为什么找不到这个命令。任何帮助都会很棒。
答案 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