質問に答える

wp-cliの問題とCiviCRMでのcronの設定

私はCiviCRM cronジョブを設定しようとしています。

wp-cliをダウンロードしてインストールしました。

http://wp-cli.org/

私はcronジョブを実行しているユーザーとしてサーバーにログインしています。

私は正常にシェルでこのコマンドを実行することができます:

 /usr/local/bin/wp  --url=https:/// --path=/home/// civicrm api job.execute auth=0 

しかし、私がcronで同じコマンドを実行すると、このエラーがCronの電子メールに返されます。

===================

Set-Cookie: PHPSESSID=73sl011599lmjbg5038j5n06q4; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-type: text/html; charset=UTF-8


Warning: fwrite() expects parameter 1 to be resource, string given in phar:///usr/local/bin/wp/php/WP_CLI/Loggers/Base.php on line 61

Warning: fwrite() expects parameter 1 to be resource, string given in phar:///usr/local/bin/wp/php/utils-wp.php on line 118

Warning: Cannot modify header information - headers already sent by (output started at phar:///usr/local/bin/wp/php/WP_CLI/Loggers/Base.php:61) in /home///wp-includes/pluggable.php on line 1216

============================

私もwhoamiコマンドをcronで実行し、それがシェルとcronジョブで実行されているのと同じユーザーであることを確認します。

wp –infoをシェルで実行すると、次のようになります。

OS:     Linux 3.10.0-514.21.2.el7.centos.plus.x86_64 #1 SMP Wed Jun 21 17:20:54 UTC 2017 x86_64
Shell:  /bin/bash
PHP binary:     /opt/cpanel/ea-php56/root/usr/bin/php
PHP version:    5.6.33
php.ini used:   /opt/cpanel/ea-php56/root/etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.0

=====================

cronジョブでwp –infoを実行すると、次のようになります。

OS:     Linux 3.10.0-514.21.2.el7.centos.plus.x86_64 #1 SMP Wed Jun 21 17:20:54 UTC 2017 x86_64
Shell:  /bin/bash
PHP binary:     /opt/cpanel/ea-php56/root/usr/bin/php-cgi
PHP version:    5.6.33
php.ini used:   /opt/cpanel/ea-php56/root/etc/php.ini
WP-CLI root dir:        phar://wp-cli.phar
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /usr/local/bin
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 1.5.0

================

さて、PHPのバイナリパスは異なります。 WP_CLIのpharパスはそのままです。

私はこれが問題かもしれないと仮定していますか?

しかし、私はなぜ彼らが異なっているのか、それをどうやって調和させるのか分からない…

どんな洞察力も感謝して受け取りました。

ありがとう、 ノーマン

ベストアンサー

多くの研究と専門家のアイデアを得た後…

(私はこれが多くの人々に知られていると確信していますが、これを知らない他の人たちを助けるためにここに投稿しています)

TLDR; Cronジョブでは、PHPバイナリとwp-cliへのパスを完全に指定する必要があります。

===========================

Cronは独自の最小限の環境で動作します。関連ユーザーとして実行されますが、ほとんどのユーザー環境情報はロードされません。この投稿は、私がこれを理解するのに役立ちました:

https://serverfault.com/questions/
337631/crontab-execution-does-have-same-environment-variables-as-execution-user

私はPHPの独自の管理のいくつかを行うcPanelを実行しています。
cPanelのサポート担当者は、私がより多くのことを理解するのを助けるのに非常に役立っていました。

明白ではないことは、シェルにログインするときに、ユーザーの.bash_profileにないものであっても、さまざまなパスが追加されるということです。
Cronは必ずしも同じことをするわけではありません。

シェルログインで追加されるものは/ usr/local/bin /

したがって、 “which php”と入力すると/ usr/local/bin/phpが得られますが、cronでは/
usr/bin/php

cPanel、あるいは実際に私が期待している他のツールでは、これはあなたがどのユーザであるかに応じて変わる可能性のある特定のPHPバイナリへの参照を含んでいます。

私は根本的な仕組みを理解しているようなふりをしていません。

しかし、結論は、phpコマンドがシェルやcron経由で別のバイナリを指すことです。

したがって、cronの仕事では、特定のphpバイナリを次のようなコマンドで指し示す必要があります。

/usr/local/bin/php /usr/local/bin/wp --info (etc)

または、目的のPHPバイナリへのフルパスさえも:

/opt/cpanel/ea-php56/root/usr/bin/php /usr/local/bin/wp --info (etc)

cPanelでは、自動PHP検出が機能しないサイトでPHP-FPMを使用すると、既知の問題があるため、cPanel
PHPのデフォルトに戻ります。彼らはそれを修正するために取り組んでいます。これが問題であれば、目的のPHPバイナリへのフルパスを設定することができます。

モバイルバージョンを終了