2010-04-28 64 views
1

我已經寫了一個python腳本,它允許用戶輸入消息,他的電子郵件和時間,他們希望發送電子郵件。這全部存儲在mysql數據庫中。python中的定時電子郵件提醒

但是,如何讓腳本在上述時間和日期執行?它需要一個cron工作嗎?我的意思是說在4月20日2點15分,腳本將在2:15的所有時間搜索數據庫,併發送這些電子郵件。但是2:16的電子郵件呢?

我正在使用提供的共享主機,因此不能有連續運行的腳本。

感謝

+1

您的共享主機環境是否提供unix'at'或'cron'命令? – unutbu 2010-04-28 19:24:35

+0

其中一人肯定會提供cron工作,另一個我必須檢查。有沒有辦法做到這一點沒有cron工作? – Ali 2010-04-28 20:30:54

回答

2

如果你不能有一個連續運行的腳本,一些必須觸發它,這樣就必須依靠你的操作系統內部。在unix環境中,一個cron作業,就像你自己所說的那樣,就可以做到這一點。

設置cron運行腳本,並讓腳本等待給定時間,然後繼續運行併發送,直到下一封電子郵件超過此特定時間。然後讓腳本爲新的喚醒時間添加新的cron作業。

+1

但是,如果我想強調時間準確性,即您的電子郵件只會在您確切的指定時間發送,那麼我將需要每分鐘一個cron作業。 您如何看待Gmail呢? – Ali 2010-04-28 20:30:07

+0

您可以每小時運行一次cron作業,並檢查是否有任何電子郵件在下一小時內發送。如果是這樣,那麼讓程序繼續運行直到規定的時間,然後關閉腳本。如果在下一小時內沒有電子郵件發送,請立即關閉腳本。 – swanson 2010-04-28 20:55:34

+1

我想建議完全跳過數據庫,並讓腳本添加發送電子郵件的cron作業。吻。 – daramarak 2010-04-29 08:58:29

2

貌似這個Django應用程序只是爲人們在您的情況作出...

http://code.google.com/p/django-cron/

而且,您的設計似乎有點缺陷。如果它在2:15運行,你不會僅僅發送應該在2:15發送的電子郵件,而是應該發送過去應該發送但尚未發送的電子郵件。

你的數據庫應該: A.刪除條目一旦他們發送 或 B.對數據庫表中定義存儲它是否被髮送或不是列。那麼你的邏輯應該使用該列。

1

cronjob每分鐘左右都會這樣做。如果你正在考慮這個問題,你可能會喜歡兩件事:

1 - 每分鐘發送多少封電子郵件?如果您需要1秒鐘發送電子郵件,並且每分鐘有100封電子郵件,您將無法完成您的隊列。

2 - 如果一個工作在最後一個工作完成之前開始會發生什麼?小心不要發送兩封電子郵件。您需要確保第一個流程結束(風險:您最終可以放棄電子郵件),避免下一個流程開始(風險:第一個流程掛起整個隊列)或使它們並行工作(風險:同步問題)。

如果您採用daramarak的建議 - 讓腳本在最後添加一個新的cron作業 - 如果發生一個錯誤,您將面臨整個系統發生崩潰的風險。