2016-10-27 8 views
-1

私はcronでタスクを持っています:3時間ごとにPHPスクリプトを実行します。Cronコマンドは60秒ごとにphpスクリプトを実行してからすべてをオーバーロードします

私はWGETとPHPでも試しましたが、同じ問題がありました。スクリプトは2分以上で動作しますが、ほとんどの場合30秒です。そして、実行時間が60秒を超えると、それは落とされ(504 getway)、cronはこのスクリプトを再び実行します。そして、何度も何度も。数時間で致命的な過負荷になります。

私は別の構文の膨大な量でこれを試みたが、失敗:

  • を/var/www/webmy/data/www/website.com/news.php -q

    • PHP

      は/ usr/binに/ wgetの-O - 私は私のスクリプトを実行するだけで1つの試しにコマンドを管理するにはどうすればよい-q -t 1 http://website.com/news.php

    ? 60秒ごとに何百万回も実行する必要はありません。どんな制限?

    おそらく、不適切なスクリプトが実行されないように、実行時間を20秒に制限/制限できます。私はちょうどスクリプトを実行する必要がある、私はいつでもシステムを待つ必要はありません、スクリプトは決してタスクを完了します。

  • +0

    致命的な過負荷どこに?ジョブを実行しているシステム、またはジョブがヒットしているシステム –

    +0

    cronジョブのcrontabエントリを投稿してください。おそらくあなたの間隔に問題があります。あなたはコンソールで直接コマンドを試しましたか?この場合の実行時間はどれくらいですか? –

    答えて

    0

    あなたはset_time_limit (int $seconds); でPHPスクリプト内で直接実行時間の最大値を設定することができますが、すべてのよりhere

    0

    まずを参照してください、wget提案は悪いものです。 cronタスクにPHPスクリプトを使用する場合は、コマンドラインスクリプトとして実行する方がよいので、直接実行し、ではなく、Webサーバー経由でを実行します。

    スクリプトでサーバー情報やGET/POST変数に依存しないと仮定します。一度実行してみましたか??何か変なことが起きたことはありますか? 、あなたが同じ時間に実行されている2つのスクリプトの回避が保証たい場合は、ロックのいくつかの種類を使用する必要があります

    * */3 * * * php /path/to/script.php 
    
    +0

    私はSSHを介して、またはブラウザを介して直接手動で提供しています。それは60秒以上必要な場合でも動作するはずです。 cronが残業に直面していて、スクリプトを再実行しても、前回の実行はまだ進行中ですが、60秒後に再度ヒットします。 したがって、最大実行時間set_time_limit(int $ seconds)で十分ですか? –

    +0

    3時間ごとにスクリプトを実行していると、あなたのスクリプトの実行が重なっているとは想像もできません...しかし、スクリプトの開始時に 'set_time_limit(60)'を使用すると、 60秒以上走ってはいけません。 – 1sloc

    +0

    set_time_limit(120)は正常に動作します。スクリプトを終了するのに十分な120秒。 ありがとう! –

    0

    :以下のような

    簡単なcrontabエントリは一度だけ3時間ごとにスクリプトを実行します例えば最も単純なファイルロックflock

    関連する問題