我開發了一個 PHP 腳本,我想在其中向用戶發送自動郵件。我使用 PHP 腳本成功實作了 cron 作業,檢查 PHP 郵件隊清單中是否有待處理的郵件。該腳本工作正常,但 cron 作業工作得很奇怪:它向用戶發送郵件,但一次發送 3 或 4 個郵件。我只想發送一次郵件。我怎樣才能實現這個目標?
我使用一個條件來檢查郵件是否發送,如果為0,則將發送郵件並將值更新為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
可能是一個更好的解決方案,因為它無需網頁伺服器即可工作。