Apache-2.2

一次發送大量電子郵件的 Cron 作業

  • August 27, 2012

我開發了一個 PHP 腳本,我想在其中向使用者發送自動郵件。我使用 PHP 腳本成功實現了一個 cron 作業,該腳本檢查了一個 PHP 郵件隊列表中的待處理郵件。該腳本執行良好,但 cron 作業執行異常:它將郵件發送給使用者,但一次發送 3 或 4 個。我只想發送一次郵件。我怎樣才能做到這一點?

我使用條件來檢查郵件是否已發送,如果為 0,則它將發送郵件並將值更新為 1。此條件工作正常。此外,相關數據庫僅顯示每個使用者一個條目,因此從邏輯上講,應該只向使用者發送一封電子郵件,但 cron 作業一次向使用者發送 3 或 4 封相同的電子郵件。

我每 2 分鐘設置一次 cron 作業。命令如下:

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

如果您認為腳本的多個實例可能同時執行,請使用某種形式的鎖定機制。將您的 wget 放入腳本中並將其包裝在flock命令中

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

可能會是一個更好的解決方案,因為它可以在沒有您的網路伺服器的情況下工作。

引用自:https://serverfault.com/questions/421485