I have a script which dumps out database and uploads the SQL file to Swift. I've run into the issue where the script runs fine in terminal but fails in cron.
A bit of debugging and I found that the /usr/local/bin/swift
command is not found in the script.
Here's my crontab entry:
*/2 * * * * . /etc/profile; bash /var/lib/postgresql/scripts/backup
Here's what I've tried:
- Using full path to
swift
as/usr/local/bin/swift
- Executing the
/etc/profile
script before executing the bash script.
How do I solve this?
Best Answer
Cron doesn't run with the same environment as a user. If you do the following you will see what I mean:
type
env
from your terminal prompt and make note of the output.Then set a cron job like this and compare it's output to the previous:
You will find that the issue is likely because
crontab
does not have the samePATH
variable as your user. As a solution to this you can (from your postgres user)echo $PATH
and then copy the results of that to the first line of your crontab (something like this)Or if you want to be more specific you can simply add the following:
However I normally always put my user's PATH in crontab because I haven't yet heard a good reason not to do so and you will likely run into this issue again if you don't.