RayJ
RayJ

Reputation: 742

WP-CLI: STDOUT error when called in CRON (crontab)

Little help or guidance. Server is CentOS 7 - with WHM/CPanel installed.

Command:

$(which php) $(which wp) core update --require=/opt/wp-cli-pre.php --path=/home/USER/public_html/

The contents of /opt/wp-cli-pre.php

<?php
if(!defined('STDIN')) define('STDIN',  fopen('php://stdin',  'r'));
if(!defined('STDOUT')) define('STDOUT', fopen('php://stdout', 'w'));
if(!defined('STDERR')) define('STDERR', fopen('php://stderr', 'w'));

Works as expected from the command line, but if from cron job, I get:

PHP Warning: Use of undefined constant STDOUT - assumed 'STDOUT' (this will throw an Error in a future version of PHP) in phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/utils.php on line 1057

output of "which php" /usr/local/bin/php

output of "which wp" /usr/local/bin/wp

I have installed the latest WP-CLI from https://wp-cli.org/

Upvotes: 0

Views: 981

Answers (2)

RayJ
RayJ

Reputation: 742

At long last, I have found the solution.

When the CRON runs a PHP script like this: */5 * * * * php /path/to/script.php

The SAPI name is: cgi-fcgi (on a WHM/CPanel install on CentOS)

It cannot find the CLI version setup by CPanel at /usr/local/bin/php as the $PATH var is just: /usr/bin:/bin

So, the solution is to not depend on the system environment to determine the PHP you want. But to set that directly.

Like this: */5 * * * * /usr/local/bin/php /path/to/script.php

It was always my assumption that if a CRON was setup in ROOT's crontab, it would inherit ROOT's environment. This apparently is not the case.

Upvotes: 1

Mohammad Nizamuddin
Mohammad Nizamuddin

Reputation: 11

You should take a look at the following post.

https://forums.cpanel.net/threads/users-cannot-use-wp-cli-in-cron.643293/

Upvotes: 0

Related Questions