web-dev-qa-db-ja.com

Drush 8のCronの問題

私のDrupal 6サイトは、Apache 2.2、PHP 5.5、MySQL 5.6がインストールされたLinuxサーバーでホストされています。私は、作曲家を介してインストールしたDrush 8を使用しています。このスクリプトを毎日実行するcPanelを介してcronジョブを設定します。

#!/bin/bash
# Script to execute all the cron jobs with drush
echo '**************** French site *******************'
cd /home/myuser/public_html/fr/sites/fr.mysite.com
/home/myuser/.composer/vendor/bin/drush -v core-cron
echo '**************** English site ******************'
cd /home/myuser/public_html/en/sites/en.mysite.com
/home/myuser/.composer/vendor/bin/drush -v core-cron
echo '**************** Spanish site ******************'
cd /home/myuser/public_html/es/sites/es.mysite.com
/home/myuser/.composer/vendor/bin/drush -v core-cron
echo '**************** Completed **********************'

しかし、失敗し、次のように終了します。

**************** French site *******************
X-Powered-By: PHP/5.5.33
Content-type: text/html

<br />
<b>Warning</b>:  proc_open(): Descriptor item must be either an array or a File-Handle in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>434</b><br />
<br />
<b>Warning</b>:  proc_get_status() expects parameter 1 to be resource, boolean given in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>435</b><br />
<br />
<b>Warning</b>:  proc_close() expects parameter 1 to be resource, boolean given in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>436</b><br />
**************** English site ******************
X-Powered-By: PHP/5.5.33
Content-type: text/html

<br />
<b>Warning</b>:  proc_open(): Descriptor item must be either an array or a File-Handle in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>434</b><br />
<br />
<b>Warning</b>:  proc_get_status() expects parameter 1 to be resource, boolean given in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>435</b><br />
<br />
<b>Warning</b>:  proc_close() expects parameter 1 to be resource, boolean given in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>436</b><br />
**************** Spanish site ******************
X-Powered-By: PHP/5.5.33
Content-type: text/html

<br />
<b>Warning</b>:  proc_open(): Descriptor item must be either an array or a File-Handle in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>434</b><br />
<br />
<b>Warning</b>:  proc_get_status() expects parameter 1 to be resource, boolean given in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>435</b><br />
<br />
<b>Warning</b>:  proc_close() expects parameter 1 to be resource, boolean given in <b>/home/myuser/.composer/vendor/drush/drush/includes/startup.inc</b> on line <b>436</b><br />
**************** Completed **********************

奇妙なことに、任意のサイトで手動でdrush -v core-cronを実行すると、cronの実行が正常に終了します。問題の原因が本当にわかりません。

2
Roger-Ro

質問へのコメントに続いて、Shebang行の後のスクリプトの最初の行としてphp -vを追加し、それを手動とcronの両方で実行しました。

手動で、sh myscript.shを実行して、次のように取得しました。

PHP 5.5.33 (cli)

そして、スクリプトは正常に終了しました。

Cronを通して、私は持っています:

PHP 5.5.33 (cgi-fcgi)

そして、スクリプトは失敗に終わりました。

つまり、これは実際にphp-cgi/php-cliの問題です。私の場合、cronはphp-cliではなくphp-cgiを使用しています。

しかし、私はマネージドVPSでホストされており、D6をこれ以上長く使用するつもりはないので、wgetを使用して別のスクリプトを簡単に作成できるようになりました。

#!/bin/bash
# Script to execute all the cron jobs with wget
echo '**************** French site *******************'
wget --no-cache --spider http://fr.mysite.com/cron.php
echo '**************** English site ******************'
wget --no-cache --spider http://en.mysite.com/cron.php
echo '**************** Spanish site ******************'
wget --no-cache --spider http://es.mysite.com/cron.php
echo '**************** Completed **********************'

Drushを使用するよりも少し遅いですが、うまく動作します。

0
Roger-Ro

スクリプト内でcdを呼び出す代わりに、drushエイリアスを設定するか、--rootおよび--uriパラメータをcronリクエストに渡すことをお勧めします。

/home/myuser/.composer/vendor/bin/drush -v --root=/home/myuser/public_html --uri=fr.mysite.com core-cron

これで、drushが正しいコンテキストで実行されていることを確認できます。

また、DRUSH_PHP環境変数を設定することで、希望するphpでdrushが実行されていることを確認できます。

2
eporama