0

I created a script to do something (after I reduced it just to echo "IS FINALLY WORKING" for testing purpose). If I type

#bash /var/www/html/somedir/script.sh

it works ok.

The problem is that I need a cron to access it and it doesn't work.

To set up the cron I used:

crontab -e

15 * * * * /var/www/html/somedir/script.sh 

or

15 * * * * bash /var/www/html/somedir/script.sh

I see no result at all.

Also I tried to log it

15 * * * * /var/www/html/somedir/script.sh > cronscriptlog.log

The log is empty.

The os is CentOS 5.5.

  • Note: SELinux is disabled. – zozo Mar 30 '11 at 7:31
  • I checked the mails and it says the file does not exist (even though the path is correct). – zozo Mar 30 '11 at 7:43
1

Make sure /var/www/html/somedir/script.sh doesn't rely on anything outside cron's default PATH. CentOS has the default PATH set to /sbin:/bin:/usr/sbin:/usr/bin.

You may wish to create cron jobs like this:

15 * * * * ( . /etc/profile && /var/www/html/somedir/script.sh )

or

15 * * * * su - user /var/www/html/somedir/script.sh 

to get an execution environment similar to that of your command line.

2

Easy to miss simple things sometimes.

The other thing to check is the cron environment, it'll run it every minute with this so just comment it out after it's given you output once.

* * * * * root env > /tmp/cronenv.log

There's always a difference between the Bash environment and the cron environment.

  • Th OP says it runs OK from the command line? – Iain Mar 30 '11 at 7:44
  • Hadn't finished typing and hit 'submit', whoops :-) – Jonathan Ross Mar 30 '11 at 7:45
  • Tried adding a user explicity: `15 * * * * root /var/www/html/somedir/script.sh' ? – Jonathan Ross Mar 30 '11 at 7:51
  • crontab -e implies a user crontab not a system crontab so your second command doesn't work because root isn't a command. – Iain Mar 30 '11 at 7:52
  • Sorry, I'd forgotten. – Jonathan Ross Mar 30 '11 at 8:17
0

Are there any relevant messages in the cron log file /var/log/cron on a CentOS system?

Check the mail for the account that is trying to run the script, that's where cron sends any output it gets from the script.

You have only captured stdout from ypur script you can capture stderr too with &> cronscriptlog.log.

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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