2017-08-15 13 views
0

バックグラウンドでcronジョブを実行する必要があります。上記のコマンドでコードをテストしました。しかし、私はこのエラーを取得する:require_onceがコマンドラインで動作しない

PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so' - /usr/lib64/extensions/no-debug-non-zts-20100525/imagick.so: cannot open shared object file: No such file or directory in Unknown on line 0 
PHP Warning: require_once(../config.php): failed to open stream: No such file or directory in /home/test9/public_html/degerlendir/test-4567.php on line 2 
PHP Fatal error: require_once(): Failed opening required '../config.php' (include_path='.:/usr/lib64/php') in /home/test9/public_html/degerlendir/test-4567.php on line 2 

問題は、ページが親ディレクトリ内config.phpのが含まれていませんです。ブラウザで正常に動作するページ。私はrequire_once($ _SERVER ['DOCUMENT_ROOT']。 "/ config.php")のような異なるrequire_onceバリエーションを使用しようとしました。私はそれを働かせることができませんでした。

答えて

1

Cronジョブは、常にルートからインクルードされたファイルのフルパスを取得します。あなたのcronジョブで

/home/test/.../your-file

1

、あなたはそれが含まれています見つけるためにあなたのPHPファイルを許可するように、正しい作業ディレクトリにCDにする必要があります。私は小さなシェルスクリプトを作成することによって、これを行う、とcronからシェルスクリプトを実行します。

#!/bin/bash 
DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
cd ${DIR} 
php test-4567.php 

exit 0 

また、これはあなたにあなたがドン作るためにスクリプトがすでに実行されているかどうかをチェックするようないくつかの有用なものを行うための機能を提供しますそれが避けたいものなら、複数のスレッドをスピンアップしないでください。

#!/bin/bash 
FIND_PROC=`ps -ef |grep "php test-4567.php" | awk '{if ($8 !~ /grep/) print $2}'` 
# if FIND_PROC is empty, the process has died; restart it 

if [ -z "${FIND_PROC}" ]; then 
     DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" 
     cd ${DIR} 
     php test-4567.php 
fi 

exit 0 
1

$_SERVER['DOCUMENT_ROOT']がありません。これはhttpサーバ(Apache)からのみ利用可能です。

作業ディレクトリは自動的には設定されません。プロンプトが/ some/path /にある場合、スクリプトは/some/config.phpにconfig.phpを見つけようとします。

スクリプトの先頭に__DIR__を使用して、現在のパスに

<?php chdir(__DIR__); ?>

をCDをお試しください
関連する問題