Report this

What is the reason for this report?

Cronjob not running php script

Posted on April 28, 2015

I set up cronjob with following command:

sudo crontab -e

I tried following statements for cronjob but it doesn’t work:

30 2 * * * php -q /path/to/php/script.php
30 2 * * * /usr/bin/php /path/to/php/script.php
30 2 * * * /usr/bin/php -q /path/to/php/script.php

But when I tried the GET method as follows, it works:

30 2 * * * wget http://my.domain.com/path/to/php/script.php

I have a LAMP setup Ubuntu 12.04 (64-bit) system with my PHP version manually upgraded from 5.3 - 5.4 to run modules on my WHMCS installation.

Any idea what’s going wrong while running with PHP mode? I don’t want to use GET method!



This textbox defaults to using Markdown to format your answer.

You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!

These answers are provided by our Community. If you find them useful, show some love by clicking the heart. If you run into issues leave a comment, or add your own answer to help others.

Most likely, it is looking for config scripts in a relative path.

Think of this example:

php /path/to/file.php

Now, if the file has something like this:

include 'config.inc.php';
....

This will fail, because you are in your home directory, not in the same directory where config.inc.php resides.

Now, when you call it via a curl/wget call:

curl http://some-site.com/file.php

Apache will tell it that it is being executed in /path/to/, so when it looks for config.inc.php, it will find it.

Relative paths are good, but only if you fully understand how they work. If you prefer not to use wget/curl, change the cron to something like this:

30 2 * * * cd /path/to/php/; /usr/bin/php -q script.php

Crontab executes the task using the current user that ran crontab -e. When you use wget it’s handled by Apache using the www-data user/group pair.

First, make sure the script works as expected.

 $ php /path/to/php/script.php

Second, edit the crontab for the Apache user account

 $ sudo crontab -u www-data -e

Now add the crontab and output to a log file.

30 2 * * * php /path/to/php/script.php >> /var/log/apache2/crontab.log

I would recommend that you create a bash script to run this, and then call that with crontab.

This comment has been deleted

The developer cloud

Scale up as you grow — whether you're running one virtual machine or ten thousand.

Get started for free

Sign up and get $200 in credit for your first 60 days with DigitalOcean.*

*This promotional offer applies to new accounts only.