Question

Cronjob not running php script

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!


Submit an answer

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!

Sign In or Sign Up to Answer

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.

Want to learn more? Join the DigitalOcean Community!

Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in Q&A, subscribe to topics of interest, and get courses and tools that will help you grow as a developer and scale your project or business.

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.

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

This comment has been deleted