web-dev-qa-db-ja.com

メール送信アクションが失敗する:Cronが1時間以上実行されており、スタックしている可能性が高い

Drupal 6のインストールを維持しています。タスクはすべての登録済みユーザーに電子メールを送信することでした。デフォルトアクション「1つのルールを含むすべてのユーザーに電子メールを送信する」を含むルールセットを使用していましたルールセットがスケジュールされ、実行され、スケジュールから削除されました(自動的に期待どおりに)が、タスクはバックグラウンドで永久に再起動したようです。すべての(またはおそらく多くの)ユーザーは1時間ごとにメールを受け取りました(私はcronを停止するまで6回です。poormans-cronを使用します。

この質問に答えるのを手伝ってください:

  1. 次のcron(1h)がジョブがまだ完了していないと判断してジョブを再開するまでの60分間にメールを送信できなかった(約300ユーザー)と思います。正しい?
  2. 1時間で300通のメールは問題ないはずですが、どこかで見ましたが、メールを送信する間隔を設定できることを思い出せません。あれは正しいですか?どこかわかるなら教えてください。
  3. その理由で、1以外のものを考えることができますか? (私は箱から出してdrupal 6関数)を使用しました)。

ログは示しています:

エラーcron 18/02/2012-12:04 cronは1時間以上実行されており、スタックしている可能性が高いです。
警告cron 18/02/2012-11:08 cronの実行は制限時間を超え、中止されました。
エラーcron 18/02/2012-11:04 cronが1時間以上実行されており、スタックしている可能性があります。
警告cron 18/02/2012-10:07 cron実行が制限時間を超えて中止されました。
エラーcron 18/02/2012-10:03 cronは1時間以上実行されており、スタックしている可能性があります。
警告cron 18/02/2012-09:07 cronの実行が制限時間を超えて中止されました。
エラーcron 18/02/2012-09:03 cronが1時間以上実行されており、スタックしている可能性が高いです。
エラーcron 18/02/2012-09:02 cronが1時間以上実行されており、スタックしている可能性があります。
エラーcron 18/02/2012-07:50 cronがさらに実行されています1時間より長く、スタックしている可能性が高いです。
警告cron 18/02/2012-06:46 cron ru nが時間制限を超えたため中止されました。

付録1、19.2.2012
私はPHPMailerモジュールを使用してメールを送信します。

1
spikey

私は問題を見つけて、drupalコアでファイルを変更しました:cores/common.inc、2714行目:

function drupal_cron_run() {

  // Try to allocate enough time to run all the hook_cron implementations.
  if (function_exists('set_time_limit')) {
    @set_time_limit(240); // will return a fatal error, if the script runs more than 4min
  }
...

Set_time_imit(240)行を次のように変更しました:

    @set_time_limit(2400); 

すべてのメールの送信に約14分かかるため。

お時間をありがとうございました。スパイキー

0
spikey

私はあなたのPHP構成がcronを終了させて​​いないように思います。poormanscronをオフにしてから、MySQLデータベースのcronエントリを削除してください:

DELETE FROM `variable` WHERE name = 'cron_semaphore';
DELETE FROM `variable` WHERE name = 'cron_last';

次に、admin/reports/statusに移動し、PHP=バージョンをクリックして、phpinfo()の出力を確認します。最大実行時間とは何ですか?メモリ制限とは何ですか?これらの値をより大きな数値に変更し、このページで実際に異なることを確認してから、admin/reports/statusで手動でcronを実行します。

PHPでこれらの2つの値を変更するには、サイトのwebrootにphp.iniを作成(または編集)して、追加(または変更)します。

max_execution_time = 300
memory_limit = 256M

もちろん、ここで好きな数字を自由に試してみてください。必要がない場合は、メモリ制限を非常に高くしたくないのが理想です。

1