6

cronで実行するPHPファイルがいくつかあります。コマンドを使用してcronを設定しました-

crontab crontab.txt

crontab.txtファイル内に、次のようなcronコマンドを記述しました。-

#(Updating tutor activities) - every minute
* * * * * /usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php

ただし、どの機能も機能していません(データベースクエリ、リマインダーメールの送信など)。URLを手動で実行することは機能します。

次に、メールアドレスを入力してMAILTOメールを受信しました。メールで、ページのHTMLソース全体を受け取りました。メールには何が期待されていますか?機能が機能しないのはなぜですか?


cronコマンドをに変更した場合の更新

 #(Updating tutor activities) - every minute
    * * * * * /usr/bin/wget http://project/cron/tutor_activities.php

それでも成功せず、これは私のメールで届きます-

--15:03:01--  http://project/cron/tutor_activities.php
          => `tutor_activities.php'
Resolving project... IP Address
Connecting to test.project|IP Address|:80... connected.
HTTP request sent, awaiting response... 301 Moved Permanently
Location: http://project./ [following]
--15:03:01--  http://project./
          => `index.html.1'
Resolving project.... IP Address
Connecting to project.|IP Address|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://project/home/ [following]
--15:03:01--  http://project/home/
          => `index.html.1'
Resolving project... IP Address
Connecting to wproject|IP Address|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: unspecified [text/html]
index.html.1 has sprung into existence.
Retrying.

そして、たくさんのindex.html.1ファイルindex.html.2が私のプロジェクトのルートに蓄積されています。これらのファイルを作成したくありません。ファイルを実行したいだけです。

2つのコマンドのいずれかを使用しても同じ結果になります-

   * * * * * /usr/bin/wget http://project/cron/tutor_activities.php

   * * * * * wget http://project/cron/tutor_activities.php

setを指定してphpコマンドを実行すると、このエラー/ bin / sh:php:コマンドが見つかりません。MAILTO

* * * * * php /path/to/test.php

phpそのため、コマンドを使用できません。

mailto()test.php内に簡単なものを書きました。wgetcronを実行すると(両方を使用してphp失敗すると)メールは届きませんが、URLを手動で実行することはできます。

私の問題
もう一度明確にするために、私の主な問題は、cronファイル内の機能が実行されていないことです。ファイルの作成は二次的な問題です。

どんな助けでもいただければ幸いです

ありがとう、
Sandeepan

4

7 に答える 7

7

URLをcronjobとして呼び出したい場合は、wgetのようなものを使用する必要があります。サーバー上のphpスクリプトの場合は、使用する方が簡単です。php /...pathtomyscript.../cron/tutor_activities.php

于 2010-10-08T13:55:31.783 に答える
7

試す

どのphp

返されるパスは、Cron ファイルを実行するために渡されるコマンドで配置する必要があります。シェルを介して Cron を設定している場合、問題はありませんが、念のため、絶対パスを指定してみてください。 PHPページを実行しようとしています。

/path/to/php /path/to/cron/script/

問題が解決しない場合は、このようにコマンドを発行してみてください。気軽に話し合ってください。

于 2010-10-18T08:10:48.110 に答える
1

-O -​​ を指定してwget を呼び出すと、ダウンロードしたコンテンツが stdout に送信されます。この内容は、cron から電子メール メッセージで送信されます。最初のケースでは、本来あるべきことを正確に実行しています。

-Oパラメータを指定せずにwget を呼び出すと、ダウンロードされたコンテンツをダウンロード中の Web ページと同じ名前のファイルとして保存しようとします。存在する場合は、ご覧のとおり、名前にインクリメンタが追加されます。この 2 番目のケースでは、本来あるべきことを正確に実行しています。

あなたの質問からは、出力をどこに送りたいのか明確ではありませんが、出力を毎回同じファイルに保存したい場合は、-O myfilename.htmlを使用してください。

于 2010-10-08T15:16:22.783 に答える
1

私は自分で問題を見つけました。手動で実行していた crontab ファイルに同じ URL を入れていませんでした。これは私の間違いでした。

手動で実行している間、URL に test と入力しただけで、ブラウザーに保存された URL のリストが表示され、URL を選択してhttp://www.test.project.com/cron/tutor_activities.phpいましたが、crontab ファイルにhttp://test.project.com/cron/tutor_activities.php. これが実行されると誤って想定してhttp://www.test.project.com/cron/tutor_activities.phpいました (追加する書き換えルールが存在するためwww)

しかし、書き換えルールはそれを にリダイレクトしていましたhttp://www.test.project.com/home。そのため、メールに HTML コンテンツが含まれています。

したがって、ここで学ぶべき最も重要なことは、些細なことを見逃さないようにし、すべてが正しく行われたと思い込まないようにすることです。私の場合、作業 URL をコピーして cron ファイルに貼り付けたほうがよいでしょう。

于 2010-10-18T08:13:51.650 に答える
1

cron /コマンドラインからPHPを実行している場合は、php実行可能ファイルへのフルパスを入力してください

于 2010-10-12T10:18:07.530 に答える
1

PHP が cron 環境内のパスにない可能性は十分にあります。通常のシェルと同じ設定になることは絶対にありません。cron コマンドで、php インタープリターと php スクリプトの両方への絶対パスを使用してみてください。

* * * * * /path/to/php /path/to/test.php

ファイルの作成に関しては、wget コマンドにリダイレクトを追加するだけです。

wget -O - ... http://....     > /dev/null

-O -wget に、ダウンロードしたものをすべて標準出力に書き込むように強制します。これは、cron が喜んで電子メールで送信します。コマンドの最後にを追加すること> /dev/nullで、この出力は代わりに Great Bitbucket in the Sky に送られます。wget の stderr 出力も電子メールで送信したくない場合は、 の2&>1後にを追加することもできます/dev/null。これにより、stderr が stdout にさらにリダイレクトされ、現在は /dev/null に移動します。

于 2010-10-15T22:18:18.250 に答える
0

これを行う簡単で安全な (tmp ファイルを使用しない) 方法は、bash のプロセス置換を使用することです。

* * * * * bash -c "/path/to/php <(/usr/bin/wget -O - -q -t 1 http://project/cron/tutor_activities.php)"

プロセス置換は、コマンドを内部で実行<()し、現在のプロセスからのみ表示されるファイル オブジェクトに出力を配置します。cron から使用するには、bash を直接呼び出して、コマンド文字列として渡します。

そして、他の人が言及したように、で見つけることができるphpへのフルパスを使用してくださいwhich php

于 2010-10-16T19:51:49.253 に答える