2009-07-01 5 views
4

私はphpスクリプトを呼び出すcronジョブを実行しています。ファイルがcronによって呼び出されたときに "ストリームを開けませんでした"というメッセージが表示されます。ディレクトリに移動してその場所からファイルを実行すると、すべて正常です。基本的に、インクルードしたいinclude_once()ファイルは、phpスクリプトのあるディレクトリから2つ上のディレクトリです。にはパスとcronが含まれています

誰かが私がcronjobからうまくいかせる方法を教えてもらえますか?

+0

お元気ですか、ありがとうございました!私はcronスクリプトで環境を設定します。 – user109162

答えて

5

これを行うには、複数の方法があります含まれます:あなたは、あなたのcronスクリプト内のディレクトリにcdができますへ

cd /path/to/your/dir && php file.php 

またはポイントをPHPのcurrent scriptに対する正しいインクルードファイル:

include dirname(__FILE__) . '/../../' . 'includedfile.php'; 
+0

ねえ、私は最初の例がうまくいくと信じています。私はすでにここに投稿する前にあなたの最後の提案を使用しようとしているし、それを働かせることができませんでした。 Paxが下で述べたように、cronは最低限のenvで始まり、今までこれを知りませんでした。ありがとう! – user109162

+0

魅力のように働いて、もう一度soulmergeに感謝! – user109162

5

cronは、最小限の環境で起動することで有名です。いずれか:

  • あなたのスクリプトを自分の環境に設定してください。
  • には、環境を設定してスクリプトを呼び出す特別なcronスクリプトがあります。または
  • は、crontab自体の中で環境を設定します。

(私は設定する必要はありませんあまりにも多くのものがあるかどう使用する傾向があるものです)最後の例は次のとおりです。

0 5 * * * (export PATH = /mydir:$PATH ; myexecutable) 
+0

こんにちは。ご回答いただきありがとうございます。 Ehatは環境を設定することによって意味しますか?私のことを詳しく教えてください。ありがとう。 – user109162

+0

なぜcronで失敗するかによって異なります。欠落している環境変数の場合は、.profileをソースします。ディレクトリの場合は、 "(cd/mydir; ./myexecutable)"をコマンドとして使用します。 – paxdiablo

+0

ヘイパックス、本当に助けと方向性に感謝します。パスをエクスポートする何らかの理由で、ソリューションを動作させることができませんでした。私のサーバはBASHを使用していますが、私はexportコマンドを使用すると信じていますが、何らかの理由で動作しません。私はsoulmergeのソリューションを使用し、dorectoryにcdしただけでそこからスクリプトを実行しました。魅力のように働いた。 – user109162

1

は、あなたがパスのcronであるかを確認する必要がありますから実行。

echo pathinfo($_SERVER["PATH_TRANSLATED"]); 

このに従って

include $path_parts['dirname']."/myfile.php"; 
+1

こんにちはハイム、返事をありがとう。私はpathinfo関数について知りませんでした。これは将来私を助けます。ありがとうございました! – user109162

+0

cronジョブで$ _SERVERを使用することはできません。絶対パスを取得し、cronスクリプトにコピー/貼り付けることには何も問題ありません。 – AVProgrammer

関連する問題