Ask Ubuntu is a question and answer site for Ubuntu users and developers. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

this is my cron entry:

*/5 * * * * /home/user/scripts/ && echo "Backup Successful: $(date)" >> /home/user/tmp/mybackup.log

This is the script that is called:

date_now=`date +%Y_%m_%d_%H_%M`

if [ -z "$dir_name" ]; then
    mkdir $dir_name

log() {
    echo $1

#    rm -rf db_backup* 
    log 'cleaning up....'

    log 'snapshotting the db and creating archive' && \
    mongodump -o ${HOME}/${dir_name} && tar -cjf ${HOME}/${tar_name} ${HOME}/${dir_name} || \
    log 'data backd up and created snapshot'

    log 'saving the backup archive in amazon S3' && \
    s3cmd put --acl-private ${HOME}/${tar_name} s3://bucket-name/db-backups/${tar_name} && \
    log 'data backup saved in amazon s3'

do_backup && do_cleanup

The thing is, this script works from the command line, but not from crontab. I took a look at Reasons why crontab does not work, and I have done everything that is mentioned there.

Is there anyway of running it via cron?

EDIT: I am currently running as su -c user Does that pose a problem?

share|improve this question
Did you put that && echo part in after it didn't work? I wouldn't put that in just in case. Did you put this in your system cron or your user cron? Can you explain how you're running it from the command line? is the script executable? – Martin Owens -doctormo- Feb 2 '11 at 17:19
Ill try removing the && echo from the crontab and try again. Its in the user cron. TO run it from the command line I type ./scripts/ Also works with bash scripts/ Yes, the script is executable, and has -rwxr-xr-x permissions. It is owned by the user, and belongs to the same group as the user. I also tried running it as root, and it still didnt work. – theTuxRacer Feb 2 '11 at 17:24
If you want to echo something to verify the script is running, you could put the echo in the shell script itself to avoid issues on the command line. – pjmorse Feb 2 '11 at 19:56
if [ -z "$dir_name" ]; then mkdir $dir_name; fi This means: If the dir_name variable is empty or unset, run mkdir with no arguments. That's obviously not what you want. Just do: mkdir -p "$dir_name" || exit instead. How are you determining that the script does not run exactly? – geirha Feb 3 '11 at 1:55
@jgbelacqua I ran the script on the slave running CentOS, it worked :) The only conceivable diff is that I ran as root and tried as a regular user on Debian, and as a regular user on CentOS. – theTuxRacer Feb 7 '11 at 14:05
up vote 1 down vote accepted

Try changing your cron command to

bash -c '/home/user/scripts/ && echo "Backup Successful: $(date)" >> /home/user/tmp/mybackup.log'

I have found wrapping things in bash has helped setup environment values in the past. You might even be able to dump parts of your script as a result.

share|improve this answer
It did not work. Is there any particular reason you might have heard or ran across that a cript runs fine from the terminal, and not from the crontab? – theTuxRacer Feb 2 '11 at 17:35
Usually an environment issue, like inherited PATH, etc. – belacqua Feb 2 '11 at 23:05
It works, but I had a problem with the distribution. I changed to CentOS, and it works now. – theTuxRacer Feb 15 '11 at 3:52

I think, there is a problem with script permissions. Have you tried giving executable permission to your sh file? I was facing same issue. When I run through command prompt using sh command, it ran successfully. But, in crontab, it was not running. Then, I have provided 777 permission to script and it worked through crontab. It seems the problem is with Linux.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.