Please Help me out on Bash script CRON

twitter logo github logo ・1 min read

Hey folks how are you doing. Need a help.
I have a bash script to backup MySQL databases, that runs on a daily cronjob. Everything is working fine as intended but only there is an error on S3 upload part. The script is working good on manual execution but the cronjob execution says:
s3: command not found
The S3 upload code is below.

AWS="$(which aws)"
$AWS s3 cp backups.tar.gz s3://${S3_BUCKET}

Any help would be appreciated. Thanks all.

twitter logo DISCUSS (6)
markdown guide

I think which aws won't work here. It's because CRON jobs run in other ENV than the user's. So you may want to use exact path like /home/USER/aws/installation/folder s3 cp ... or what ever your aws installation it.

Or problem may be in passing ENV variables.

Just try both of the above and do let me know if it works!


Though it's working, I am curious if those work on cron

which mysql
which mysqldump
which gzip

why which aws this is not working, I mean what I am missing?
aws is on /usr/local/bin/aws


It's because CRON Jobs(crontab) runs in different environment than the user. So the CRON doesn't know where users applications are installed(like aws, mysql, gzip etc.)

But CRON by default includes some paths and ENV variables like $HOME , /usr/bin and some others.(Quick google search will tell you everything CRON includes...)

So this way CRON recognizes mysql, mysqldump as they are installed on /usr/bin/. But it doesn't include aws as it's installed in /usr/local/bin/aws/ so you should manually specify it.

I know this is little complicated, even I had similar problem when I was working with whenever gem.

Yeah, it's complicated but you explain well thanks a lot.

Classic DEV Post from Feb 22

What's your Wifi's name?

Tell me the funniest ones you've seen!

Mahfuz Shaikh profile image