AnPocArBuile
AnPocArBuile

Reputation: 665

AWS not working working from Cronjob

So I have a script to download a file from AWS daily and append it to a spread sheet. To do this I have set up a cronjob.

The Script works fine when I run it manually, but does not work when running from the cronjob.

The code has a line:

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

And in the email I recieve from the cronjob execution, I see the following error message:

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

I don't know why the command is not being found. Any help would be great.

Upvotes: 45

Views: 25789

Answers (6)

Mithlaj
Mithlaj

Reputation: 311

If you install aws console using snap then the absolute/executable address will be like /snap/bin/aws otherwise its looks like /usr/bin/aws . It can be different according to your installation. You can find this path using $ whereis aws .

eg :

snap/bin/aws s3 sync --exclude "/path to exclude" /pathtosync s3://bucketname/

Upvotes: 0

libregeek
libregeek

Reputation: 1274

You should use the full path for the aws command. For example, /usr/local/bin/aws

Upvotes: 36

Anthony Awuley
Anthony Awuley

Reputation: 3933

If you have aws in your profile, you could also include your profile by adding . $HOME/.profile

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

Upvotes: 0

Little Brain
Little Brain

Reputation: 2837

The only thing that worked for me was to specify the path explicitly in the script:

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

As a previous poster said, use which aws to find the location of aws.

Upvotes: 3

Put this code before your command line to be executed into crontab -e

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

Upvotes: 10

chaos
chaos

Reputation: 9282

First: check where on your system the executable aws is stored. Use this command:

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

Now, place a variable called $PATH in your crontab before the script:

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

Those paths separated by : define where should be search for the exectable. In the example above it's /usr/bin. You have to check all executables in your cron job that they are available.

Another thing: try to avoid path with a tilde (~) in cronjobs. Use /home/user instead.

Upvotes: 67

Related Questions