FLX
FLX

Reputation: 2679

PHP not working with CRON

I'm using crontab to call a php script.

In this script there is

error_log('test');

When the script is executed from http or direct command line like

php -f script.php

Everything is fine, my error is log.

But when called from cron it's not working.

Here is my cron

* * * * * -u www-data /full_path_to/php -f /full_path_to/script.php

Here is what I tried :

For http the error_log path is set from htaccess. I'm lost with php cli...

I can see the cron execution working every minute (syslog), so it should be a PHP config problem ?

Thanks a lot if you can help.

Edit : Cron is executed with "-u www-data"

Here is the call I see in syslog :

CRON[13921]: (www-data) CMD (-u www-data /usr/bin/php -f /fullpath/script.php > /fullpath/error.log 2>&1)

Upvotes: 2

Views: 778

Answers (3)

Shammi Shailaj
Shammi Shailaj

Reputation: 475

I was facing the same problem but was able to fix it after reading the manual entry for php.

Initially I had something set like:

/usr/bin/php -f /path/to/php/script.php -c 1426 >> /tmp/script.php.log 2>&1

I was able to fix it by changing the line to:

/usr/bin/php -f /path/to/php/script.php -- -c 1426 >> /tmp/script.php.log 2>&1

As per the manual entry the syntax is:

php [options] [ -f ] file [[--] args...]

Also,

args...        Arguments passed to script. Use '--' args when first argument starts with '-' or script is read from stdin

Going by that, my cron command becomes:

/usr/bin/php -f /path/to/php/script.php -- -c 1426 >> /tmp/script.php.log 2>&1

and it works!

Upvotes: 1

FLX
FLX

Reputation: 2679

I had in fact two problems :

1) My cron was executed with php.ini for php-cli. I used the -c flag to load the good one.

2) I was relying on $_SERVER to declare important constants using variables that do not exist in cli-mode. Now if these variables are not set I parse commande line vars with getopt()

Upvotes: 1

maxhb
maxhb

Reputation: 8865

You have to be aware that there are user specific crontabs and a system wide crontab.

When you are logged in as user foo and type crontab -e in console this will allow you to edit your own user specific crontab. All defined cron tasks will be executed as user foo. This is even true for user root. AFAIK this way you simply can not change the user under which a cron task will be run.

Quite different is the file /etc/crontab. This is the system wide crontab. Within that file you can change the user of a cron task like this:

* * * * * www-data /full_path_to/php -f /full_path_to/script.php

Upvotes: 0

Related Questions