Can't run AWS CLI from CRON (credentials)
Solution 1:
When you run a job from crontab, your $HOME
environment variable is /
The Amazon client looks for either
~/.aws/config
or
~/.aws/credentials
If $HOME
= /
, then the client won't find those files
To make it work, update your script so that it exports an actual home directory for $HOME
export HOME=/root
and then put a config or credentials files in
/root/.aws/
Solution 2:
If it works when you run it directly but not from cron there is probably something different in the environment. You can save your environment interactively by doing
set | sort > env.interactive
And do the same thing in your script
set | sort > /tmp/env.cron
And then diff /tmp/env.cron env.interactive
and see what matters. Things like PATH
are the most likely culprits.
Solution 3:
I was able to solve this issue through the following:
export AWS_CONFIG_FILE="/root/.aws/config"
export AWS_ACCESS_KEY_ID=XXXX
export AWS_SECRET_ACCESS_KEY=YYYY
Solution 4:
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