2011-12-21 49 views
1

這似乎是一個簡單的問題,但我無法找到答案。爲網絡應用運行重複任務

我正在製作一個web應用程序,它需要不斷運行一項任務。

我將使用類似PingdomTwitterfeed的網站作爲比喻。正如你可能知道的,Pingdom會檢查正常運行時間,所以經常檢查網站是否已啓動,並且Twitterfeed會檢查RSS提要,看看它們是否已更改,然後再發送。我也需要運行一個簡單的腳本來循環訪問數據庫中的URL並對它們執行操作。

我的問題是:我應該如何實現這個?我熟悉cron,目前使用它來做我的服務器備份。這是否會走?

我知道如何製作一個無限期運行的Python腳本,當我完成時,從數據庫中的下一個URL開始。我應該在服務器上運行它嗎?我怎麼知道它總是在運行,不會崩潰或什麼?

我希望這個問題有道理,我希望我不會重複別人或任何事情。

謝謝

山姆

編輯:要清楚,我所需要的任務爲持續運行。如在數據庫中檢查URL 1,檢查數據庫中的URl 2,檢查URL 3,並在到達最後一個時,直接返回到開頭。謝謝!

回答

1

如果您需要可重複運行的任務,可以從命令行運行 - 這就是cron的理想選擇。 我沒有看到這種方法的任何缺點。

更新: 好的,我看到問題有所不同。現在我看到幾種解決方案:

  • 以設定的時間間隔運行cron任務,讓它每次運行一次數據,下一次它將處理另一次運行的數據;使用PID /數據庫/信號量來避免並行進程;
  • 更新插入/更新數據庫中數據的進程;讓信息在插入/更新時進行處理; c)
  • 編寫一個惡魔進程,它將駐留在內存中並實時檢查數據。
+0

但是,我會如何使用cron來不斷運行一項任務? cron不是以設定的時間間隔運行任務嗎?或者,你的意思是每小時演出任務,並在運行一小時後自殺?謝謝。 – samiles 2011-12-21 15:12:40

+0

我的評論太大了,所以我更新了我的初始答覆。請看看它。 – Minras 2011-12-21 15:26:07

1

cron絕對是一種方法,以及任何其他您可能喜歡的任務調度程序。

主要的一點是在標題你的問題發現:

的web應用程序

後臺任務和Web應用程序應保持獨立運行重複任務。他們可以共享代碼,他們可以共享數據庫的訪問權限,但他們應該是獨立的,離散的應用程序上下文。 (將它們視爲訪問相同後端邏輯的獨立UI。)

造成這種情況的主要原因是因爲Web應用程序和後臺進程在體系結構上非常不同,並且不打算混合使用。考慮一個Web服務器(Apache,IIS等)中的Web應用程序的結構。應用程序何時「運行」?當它「開」時?這不是一個真正的運行任務。這是一個等待輸入(請求)處理和生成輸出(響應)的服務,然後返回等待。

Web應用程序用於響應請求。計劃任務或守護進程作業用於在後臺運行重複進程。將兩者分開將使您對這兩者的管理變得更容易。

+0

謝謝。在我的標題中,我的意思是說用戶看到的Web應用程序依賴後臺任務生成的數據,只是爲了給它一些上下文。也許我措辭嚴重:) – samiles 2011-12-21 15:11:29

+0

@samiles:沒有biggie,希望這篇文章能夠幫助那些在某一天在Google搜索中遇到問題的人。迴應你對Minras的答案的評論,這個線程可能會有所幫助:http://stackoverflow.com/questions/473620/how-do-you-create-a-daemon-in-python – David 2011-12-21 15:15:25