2013-02-21 106 views
0

我需要每隔一個星期三運行腳本5次。 讓它更復雜的是,腳本需要在每次運行之間停留至少1小時,1小時10分鐘會很好。如何設置一個cronjob,每隔一個星期三運行5次?

我需要這個暫停,因爲它是一個電子報發送者,它發送了大量的電子郵件,並且服務器的郵件限制是每小時3000封電子郵件。

所以當腳本應該運行的例子:

Wednesday February 20th at 10.00, 11.10, 12.20, 13.30, 14.40. 
Wednesday March 6th at 10.00, 11.10, 12.20, 13.30, 14.40. 
Wednesday March 20th at 10.00, 11.10, 12.20, 13.30, 14.40. 
Wednesday April 3th at 10.00, 11.10, 12.20, 13.30, 14.40. 

等。

有沒有可能,或者我應該以其他方式解決?

回答

3

您的發送邏輯(調度,限制等)應該在應用程序本身中處理,而不是通過cron處理。如果您將邏輯移至應用程序,您可以設置一個cronjob以每隔10分鐘運行一次應用程序腳本,並且只在適當的時間和應用程序指示它發送時才發送電子郵件。

+0

我想這樣做是正確的方法來做到這一點。我只是猶豫不決,建立一個每兩週運行2000次而不做任何事情的cronjob,對我來說似乎有點怪異。但我想這就是這樣。 – 2013-02-21 14:12:07

+0

@Kristian Rafteseth Ehhh ....我其實不太確定我是否同意這一點。就我個人而言,我會從應用程序中抽象發送機制 - 如果您正在生成電子郵件,則只需要創建它們並對它們進行排隊。無論您使用哪種電子郵件處理程序,都應對計劃,限制等工作負責(這就是說,'cron'不適合您的具體使用情況。)您可以嘗試將電子郵件寫入命名管道或其他東西,並且電子郵件處理程序讀取? – 2013-02-21 15:04:08

0

PHP中的datetime類也可以用來獲取天和複雜的時間戳組合。您可以使用循環來計算所有未來的日子。這樣,您可以對星期三進行索引,並使用偏移計數器來定義您希望執行的週數和/或時間的延遲。

http://us2.php.net/manual/en/book.datetime.php

0

這裏是一個指南,使用PHP管理crons:http://net.tutsplus.com/tutorials/php/managing-cron-jobs-with-php-2/

基本上是你的cron將採取以下形式:

Minutes [0-59] 
| Hours [0-23] 
| | Days [1-31] 
| | | Months [1-12] 
| | | | Days of the Week [Numeric, 0-6] 
| | | | | 
1 2 3 4 5 home/path/to/command/the_command.sh 

您可能需要單獨的作業運行你所需要的模式,或者每10分鐘運行一次作業,並讓腳本確定日期/時間是否正確