2014-09-03 88 views
1

我們基於Zend 1的系統有一個作爲後臺進程運行的後臺進程,用於每小時檢查用戶是否過期,如果是,系統會向這些過期的用戶發送驗證郵件。PHP上的任務/作業調度

的代碼是非常簡單的:

while(1) { 
    $worker = ... //get verification worker 
    $worker->run(); 

    sleep(3600); //run hourly 
} 

我們想尋找有免費的工具,更好的方法來替換此代碼在系統調度工作。 Zend Job Queue是非常好的方法,但它是商業的。

我下面的兩個思維方法作爲Zend的作業隊列替代:

  1. 相反運行的守護進程,在crontab來每小時運行PHP腳本配置cron作業,但我不知道它是否是上面更好的代碼與否。

  2. 在nodejs服務器上運行node cron直接調用PHP腳本。

我也看過Gearman和beanstalked他們是否支持作業調度,但真的很難在這方面。

請建議是否有更好的方法來安排PHP任務。

+1

使用本地'crontab';長時間運行的PHP腳本往往會在特定的時間點失敗。 '睡(3600);'也不準確。 – DanFromGermany 2014-09-03 10:23:40

+0

@DanFromGermany:感謝您的評論,除了長時間PHP運行在特定時間點往往會失敗,在這種情況下是否還有其他哪些crontab更適合?我對這個東西很新,我的情況確實需要準確的時間點。 – 2014-09-03 10:32:16

+1

'crontab'很容易維護(你可以使用'/ etc/cron.d'文件夾對作業進行分組),它在時間上是準確的(我見過的最大時間爲1秒)。我在一臺使用crontab的服務器上運行了幾百個cronjob,並且所有的工作都很好。 – DanFromGermany 2014-09-03 10:33:46

回答

2

Cron肯定是自動化任務的首選方式,而不是無限循環中的php腳本。

看到:http://en.wikipedia.org/wiki/Cron

您也有不少需要考慮使用Zend服務器,其中包括一個名爲Zend的作業隊列組件,它的任務和活動的離線異步處理。

看到:http://files.zend.com/help/Zend-Server-6/content/jobs_component.htm

見:http://www.zend.com/en/products/server

+0

感謝您的回答,因爲Zend Server是商業的,有沒有任何免費的工具作爲Zend Job Queue來安排工作? – 2014-09-03 10:36:06

+2

最廣泛使用的免費工具是Linux機器上的crontab,您可以通過yum或aptitude安裝它,並且調度格式使用簡單並且文檔齊備。如果你在Windows上,你可以使用Windows任務計劃程序。 – matwr 2014-09-03 10:41:13

0
0  *  *  *  *  /usr/bin/php -q /yourpath/verification_worker.php 

你可以使用crontab運行此任務每小時

希望這有助於