-1

自動メールをユーザーに送信する PHP スクリプトを開発しています。保留中のメールの php メール キュー テーブルをチェックアウトする php スクリプトを使用して、cron ジョブを正常に実装しました。スクリプトは正常に動作していますが、cron ジョブが奇妙に動作しています。ユーザーにメールを送信しますが、一度に 3 つまたは 4 つです。一度だけメールを送りたかった。どうすれば達成できますか?

私の cron ジョブは、2 分ごとにメール キュー テーブルをチェックします。

ありがとうございました!

4

3 に答える 3

2

2分ごと?私の推測では、前の cron ジョブが終了せず、2 番目の cron ジョブが開始されるため、同じ人またはアカウントに複数のメールが送信されます。

頻度を 1 時間ごとに減らしてみてください。

于 2012-08-23T12:31:28.043 に答える
0

PIDファイルの動作と同様のコードを追加します。

$path = '/path/to/pid/file';

// Check for PID file's existance, if found exit.
if (file_exists($path))
{
    echo 'PID File Exists';
    exit;
}

file_put_contents($path, '1'); // Create PID file

// Execute your code

unlink($path); // Delete the PID file

いくつかのメモ:

  • スクリプトに致命的なエラーが発生した場合、スクリプトは二度と実行されません。理想的には、ファイルの最終変更時刻を確認する必要があります。
  • WGETを使用してcronを実行するのは悪いことですが、スクリプトはブラウザ経由で実行しているかのようにタイムアウトします。代わりに、PHPCLIを使用して実行してください。
于 2012-08-23T12:37:23.990 に答える
0

のようなテーブルのフィールドを維持する必要がありますsent_status

メールをフェッチするときに、のようなsql WHERE句を使用sent_status = 0し、メールがによってユーザーに送信されるときに、このフィールドをメールIDで更新しますsent_status = 1

したがって、1人のユーザーがメールをまとめて受け取ることはできません。

于 2012-08-23T12:29:47.340 に答える