2011-12-04 12 views
0

私は特定のシステムで契約の束を更新するcronジョブを設定しました。ブラウザでPHPスクリプトを実行すると、すべて正常に動作しますが、cronjobがトリックを行う必要がある場合、失敗します。私はcronjobs(私はDirectAdminでそれらを設定することができます)と多くの経験を持っていないので、私はちょっとこれに固執しています。Cronjobは実行するコードを理解していませんか?

私のPHPスクリプトにはいくつかのクラスにいくつかのインクルードが含まれています。これらは正しく動作します(自分でメールを自分宛に送信してテストしました)。ベースクラスが含まれているとき、私はオートローディングを扱うクラスを持っています。私はClass :: GetInstance()のような何かをするとき、それは失敗します。

私のcronジョブは、次のようになります。

* * * * * /usr/local/bin/php /home/username/domains/domain/public_html/path/to/script.php 

私はこの問題を解決するために何ができますか?おそらくPHP経由で実行するのではなく、ブラウザなどで実行しますか?これは愚かな質問では申し訳ありませんが、これはわかりません)

+0

コマンドラインから実行するとスクリプトは実行されますか? – dSquared

+1

'/ usr/local/bin/php/home/username/domains/domain/public_html/path/to/script.php'は通常のシェルから呼び出されたときに動作しますか?チェックするポイントは、どのユーザーがこれを実行するために使用されていますか?環境設定は正しく行われていますか?パーミッションはどうですか? – Yahia

+0

私はあまりCL男ではありません。どうすればこれを適切にテストできますか? @ Yahia、私は確信していない、私はそのWebuser hostingaccountからだと思いますか?仕事はそこに置かれているからですか? – Ben

答えて

2

/usr/local/bin/phpでCLIを実行したときに、$_SERVER変数が正しく設定されていないことを思い出してください。私のスクリプトは$_SERVER['DOCUMENT_ROOT']を使用しなければならなかったので、私もその問題を抱えていました。言われているように、それが正常に動作するかどうかを確認するために、通常のシェルで実行しようとします。通常のブラウザからそのURLを取得するだけで同じであるため、通常、これはうまく機能

wget -q http://yourdomain.com/path/to/script.php 

:別の方法としては、あなたにcronジョブコマンドを変更することができます。ここ

wget manページ:http://linux.die.net/man/1/wget

+0

ありがとう、それは私が探していたものでした! :) +1して受け入れる。 – Ben

0

HTTP経由で呼び出されることを想定しているphpファイルは、必ずしも直接呼び出すことはできません。パスから判断すると、通常はブラウザで実行されるウェブサイトの一部なので、php-cliによって直接呼び出されるのではなく、ウェブサイトのURLにcurlリクエストを行うことでクローンを設定します。

+0

返信いただきありがとうございますが、wgetが私の解決策であるようです。 – Ben

+0

あなたのソリューションを見つけられたらうれしいです。 – favoretti

0

は「それが失敗した」とは、一つのsuffucient 1を呼び出すことができ、問題の説明ではありません。

crontabファイルに

[email protected] 
をこの行を追加し、ジョブを実行します。
スクリプトの出力が得られ、コードを修正したり、賢明な質問をすることができます。

stdoutとstderrをログファイルにリダイレクトすることもできます

+0

あなたの返事をありがとう、私は結果なしでそれを試してみました.. :(wgetは私のためにそれをしました。 – Ben

関連する問題