2017-05-04 102 views
0

我配置了一個laravel隊列來發送電子郵件,並且它用於立即正常發送電子郵件。服務器崩潰後,Laravel隊列(數據庫驅動程序)+ Cron作業(任務調度程序)堆疊並且不再發送

我還用laravel任務調度器和配置隊列:偵聽每分鐘執行,導致服務器崩潰,因爲cron作業正在調用隊列:工作循環一次又一次....網站崩潰。這是客戶的現場,所以問題非常嚴重。

託管公司修改我的laravel cron作業,每5分鐘運行一次。而且,由於它崩潰,所有郵件現在停留在數據庫中,而數據庫隊列根本不起作用。我猜這個過程並沒有運行。

我有以下問題:

  • 如何在數據庫中執行的堆疊隊列記錄?
  • 如何使數據庫隊列再次工作?
  • 如何配置cron作業& laravel時間表正常工作。

注意:我希望它與數據庫驅動程序一起工作,而不是使用redis或sync或其他東西,所以請繼續關注數據庫驅動程序,謝謝。

回答

2

laravel任務調度和配置的隊列:聽來執行每分鐘

這是不對的。你應該從來沒有通過cron調度程序調用queue:listen,否則你會得到意想不到的行爲,如發生在你身上的事情。

您應該配置隊列:監聽作爲守護進程永遠運行。一旦隊列工作人員正在運行 - 它將永遠運行並根據需要處理作業。您可以使用Supervisor來確保它仍然在運行。

+0

謝謝,這可能是我錯過了。我會盡力明天這樣做,稍後再回來。 –

+0

我有一個類似的問題,'queue:listen'意外執行'schedule()'函數。你可以幫我嗎。 [laravel無法運行預定命令](https://stackoverflow.com/q/47548220/6521116) –

1

我認爲問題在於queue:listen命令實際上是每分鐘執行一次。這不應該發生。只有在特定時刻沒有收聽時才應執行。因此,應該檢查聽衆是否正在運行,否則。見this gist,應該爲你工作。

由於執行從數據庫中的所有掛隊列任務,嘗試:

php artisan queue:restart 

和:

php artisan queue:work 

希望這有助於。

相關問題