私の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の実行が正常に終了します。問題の原因が本当にわかりません。
質問へのコメントに続いて、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を使用するよりも少し遅いですが、うまく動作します。
スクリプト内で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が実行されていることを確認できます。