2016-11-09 62 views
0

我在我的php項目中有一些後臺任務。如果某些條件滿足,它應該做一些工作。例如:如果有一些訂單比尚未交付,並且剩餘時間估計交付時間少於15分鐘,系統會向快遞員發送通知,說明他可能已經很晚了。背景php任務,cron替代品

最簡單的解決方案 - 創建每分鐘運行php腳本的cron任務。該腳本將檢查該條件並在條件滿足時發送通知。

另一種方法是隊列。我看着gearman和rabbitmq,但正如我可以看到他們另一個用例。如果您有一些直接發送任務的客戶端,則它們很合適。在我的情況下,我沒有任何客戶,它只是系統中的一些條件。

而我想到的最後一個解決方案是編寫帶有無限循環的自定義php-daemon。在每次迭代中檢查條件,如果滿意並且睡1分鐘,則完成該工作。但有可能存在內存泄漏,守護進程重啓等問題。

那麼,這個promlem在現代php的最佳解決方案是什麼?

+0

如果你去尋找一個PHP解決方案,我會用普通的cron任務來完成它。否則可能會有一些第三方選項,您可以在其中設置預定作業,並從中調用您的應用程序。或者只是創建一個運行在側面的小型隊列應用程序,例如使用nodejs。 – KungWaz

回答

0

如果cron可以爲你完成這項工作,那麼一定要用它。爲什麼重新發明輪子,當有一個可行的工具可以勝任時?我寫了一些

while (1) { 
// run forever scripts 
} 

他們跑了幾個月沒有錯誤;他們處理了簡單的mysql表的消息隊列。但是,如果你這樣做了,你將需要一個cron作業來檢查進程狀態,你需要一些鎖定來防止進程被多次啓動,等等。

+0

我第二,去cron。 –

0

如果你不喜歡使用cronjob,我想你最好的選擇是編寫一個守護進程。我喜歡用Perl編碼,如果我是你,我會用Perl編寫一個守護進程。但是,如果我要在PHP中編寫守護進程,我會在cronjob中運行另一個備份腳本(例如10分鐘的時間間隔),它將檢查我的php守護進程是否正在運行,如果沒有運行,請重新啓動守護進程。