一度に大量のメールを送信する Cron ジョブ

一度に大量のメールを送信する Cron ジョブ

ユーザーに自動メールを送信する PHP スクリプトを開発しました。保留中のメールがないか PHP メール キュー テーブルを確認する PHP スクリプトを使用して、cron ジョブを正常に実装しました。スクリプトは正常に動作していますが、cron ジョブの動作がおかしいです。ユーザーにメールを送信しますが、一度に 3 通または 4 通です。メールを 1 回だけ送信したいのですが、どうすればよいでしょうか。

メールが送信されたかどうかを確認する条件を使用します。0 の場合はメールを送信し、値を 1 に更新します。この条件は正常に動作しています。また、相対データベースにはユーザーごとに 1 つのエントリのみが表示されるため、論理的には 1 つのメールのみがユーザーに送信されるはずですが、代わりに cron ジョブによって一度に 3 つまたは 4 つの同じメールがユーザーに送信されます。

cron ジョブを 2 分ごとに設定しました。コマンドは次のとおりです。

2 * * * * wget (Http PATH to SERVER)/Utils/MailQueue.php

答え1

スクリプトの複数のインスタンスが同時に実行される可能性がある場合は、何らかのロックメカニズムを使用してください。スクリプトにwgetを配置し、群れ指示

2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /path/to/your/wgetscript 

MailQueue.phpスクリプトがcronを実行しているマシンと同じマシン上にある場合はwgetは必要ありません。

2 * * * * /usr/bin/flock -n /tmp/myAppLock.lck /usr/bin/php /path/to/Utils/MailQueue.php

ウェブサーバーがなくても動作するため、おそらくより良い解決策になるでしょう。

関連情報