我已經寫了一個python腳本,它允許用戶輸入消息,他的電子郵件和時間,他們希望發送電子郵件。這全部存儲在mysql數據庫中。python中的定時電子郵件提醒
但是,如何讓腳本在上述時間和日期執行?它需要一個cron工作嗎?我的意思是說在4月20日2點15分,腳本將在2:15的所有時間搜索數據庫,併發送這些電子郵件。但是2:16的電子郵件呢?
我正在使用提供的共享主機,因此不能有連續運行的腳本。
感謝
我已經寫了一個python腳本,它允許用戶輸入消息,他的電子郵件和時間,他們希望發送電子郵件。這全部存儲在mysql數據庫中。python中的定時電子郵件提醒
但是,如何讓腳本在上述時間和日期執行?它需要一個cron工作嗎?我的意思是說在4月20日2點15分,腳本將在2:15的所有時間搜索數據庫,併發送這些電子郵件。但是2:16的電子郵件呢?
我正在使用提供的共享主機,因此不能有連續運行的腳本。
感謝
如果你不能有一個連續運行的腳本,一些必須觸發它,這樣就必須依靠你的操作系統內部。在unix環境中,一個cron作業,就像你自己所說的那樣,就可以做到這一點。
設置cron運行腳本,並讓腳本等待給定時間,然後繼續運行併發送,直到下一封電子郵件超過此特定時間。然後讓腳本爲新的喚醒時間添加新的cron作業。
貌似這個Django應用程序只是爲人們在您的情況作出...
http://code.google.com/p/django-cron/
而且,您的設計似乎有點缺陷。如果它在2:15運行,你不會僅僅發送應該在2:15發送的電子郵件,而是應該發送過去應該發送但尚未發送的電子郵件。
你的數據庫應該: A.刪除條目一旦他們發送 或 B.對數據庫表中定義存儲它是否被髮送或不是列。那麼你的邏輯應該使用該列。
cronjob每分鐘左右都會這樣做。如果你正在考慮這個問題,你可能會喜歡兩件事:
1 - 每分鐘發送多少封電子郵件?如果您需要1秒鐘發送電子郵件,並且每分鐘有100封電子郵件,您將無法完成您的隊列。
2 - 如果一個工作在最後一個工作完成之前開始會發生什麼?小心不要發送兩封電子郵件。您需要確保第一個流程結束(風險:您最終可以放棄電子郵件),避免下一個流程開始(風險:第一個流程掛起整個隊列)或使它們並行工作(風險:同步問題)。
如果您採用daramarak的建議 - 讓腳本在最後添加一個新的cron作業 - 如果發生一個錯誤,您將面臨整個系統發生崩潰的風險。
您的共享主機環境是否提供unix'at'或'cron'命令? – unutbu 2010-04-28 19:24:35
其中一人肯定會提供cron工作,另一個我必須檢查。有沒有辦法做到這一點沒有cron工作? – Ali 2010-04-28 20:30:54