1

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.

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

3 Answers 3

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.

1
  • this part of your command --> "su -" saved my day :))
    – Sobhan
    Oct 6, 2020 at 10:26
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.

5
  • Th OP says it runs OK from the command line?
    – user9517
    Mar 30, 2011 at 7:44
  • Hadn't finished typing and hit 'submit', whoops :-) Mar 30, 2011 at 7:45
  • Tried adding a user explicity: `15 * * * * root /var/www/html/somedir/script.sh' ? Mar 30, 2011 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.
    – user9517
    Mar 30, 2011 at 7:52
  • Sorry, I'd forgotten. Mar 30, 2011 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.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .