2012-06-01 94 views
3

我已經有了,它具有以下功能一個cron運行PHP腳本:在cron上運行PHP腳本。日誌輸出不正確

  1. 過程中的項目隊列
  2. 如果項目成功處理,processQueueItem()方法返回true。如果不成功,則返回false。
  3. 重複在50分鐘

該代碼還包括回聲以將信息輸出到我已經設置了一個日誌while循環。

下面的代碼:

<?php 
require_once('/var/www/vhosts/com-ext.com/httpdocs/745_TheYGSGroup/LWC_API/com/MindFireInc/LookWhosClicking/class.LWC.php');  
require_once('/var/www/vhosts/com-ext.com/httpdocs/745_TheYGSGroup/LWC_API/com/MindFireInc/Database/class.DB.php'); 
require_once('/var/www/vhosts/com-ext.com/httpdocs/745_TheYGSGroup/includes/classes.php'); 

echo date("M d Y H:i:s"), " cron.processQueue.php has started.", "\n"; 

$consumer = new Consumer; 

set_time_limit(3300); 
$RUNS_MIN = 10; 
$itemCount = 0; 

$startedOn = time(); 
$expireOn = $startedOn + (60 * $RUNS_MIN); // In Sec 
while(time() < $expireOn) { 

    if($consumer->processQueueItem()) 
     $itemCount++; 

    if($itemCount % 60 == 0) 
     echo date("M d Y H:i:s"), " Script still running... ", $itemCount, " processed.\n"; 

} 

echo date("M d Y H:i:s"), " cron.processQueue.php has ended. Processed ", $itemCount, " items. \n"; 

>

的processQueueItem()工作正常(這就是爲什麼我不包括在這個崗位腳本)和輸出工作正常,但我對加工物品的計數表現怪異。

如果腳本運行且隊列爲空,它將睡眠(60)併爲processQueueItem()返回false。它輸出「cron.processQueue.php已經啓動」以及50個「腳本仍在運行... 0已處理」行。最後輸出「已結束」腳本。這裏有一個例子:

Jun 01 2012 11:00:02 cron.processQueue.php has started. 
Jun 01 2012 11:01:02 Script still running... 0 processed. 
Jun 01 2012 11:02:02 Script still running... 0 processed. 
Jun 01 2012 11:03:02 Script still running... 0 processed. 
Jun 01 2012 11:04:02 Script still running... 0 processed. 
Jun 01 2012 11:05:02 Script still running... 0 processed. 
Jun 01 2012 11:06:02 Script still running... 0 processed. 
Jun 01 2012 11:07:02 Script still running... 0 processed. 
Jun 01 2012 11:08:02 Script still running... 0 processed. 
Jun 01 2012 11:09:02 Script still running... 0 processed. 
Jun 01 2012 11:10:02 Script still running... 0 processed. 
Jun 01 2012 11:11:02 Script still running... 0 processed. 
Jun 01 2012 11:12:02 Script still running... 0 processed. 
Jun 01 2012 11:13:02 Script still running... 0 processed. 
Jun 01 2012 11:14:02 Script still running... 0 processed. 
Jun 01 2012 11:15:02 Script still running... 0 processed. 
Jun 01 2012 11:16:02 Script still running... 0 processed. 
Jun 01 2012 11:17:02 Script still running... 0 processed. 
Jun 01 2012 11:18:02 Script still running... 0 processed. 
Jun 01 2012 11:19:02 Script still running... 0 processed. 
Jun 01 2012 11:20:02 Script still running... 0 processed. 
Jun 01 2012 11:21:02 Script still running... 0 processed. 
Jun 01 2012 11:22:02 Script still running... 0 processed. 
Jun 01 2012 11:23:02 Script still running... 0 processed. 
Jun 01 2012 11:24:02 Script still running... 0 processed. 
Jun 01 2012 11:25:02 Script still running... 0 processed. 
Jun 01 2012 11:26:02 Script still running... 0 processed. 
Jun 01 2012 11:27:02 Script still running... 0 processed. 
Jun 01 2012 11:28:02 Script still running... 0 processed. 
Jun 01 2012 11:29:02 Script still running... 0 processed. 
Jun 01 2012 11:30:02 Script still running... 0 processed. 
Jun 01 2012 11:31:02 Script still running... 0 processed. 
Jun 01 2012 11:32:02 Script still running... 0 processed. 
Jun 01 2012 11:33:02 Script still running... 0 processed. 
Jun 01 2012 11:34:02 Script still running... 0 processed. 
Jun 01 2012 11:35:02 Script still running... 0 processed. 
Jun 01 2012 11:36:02 Script still running... 0 processed. 
Jun 01 2012 11:37:02 Script still running... 0 processed. 
Jun 01 2012 11:38:02 Script still running... 0 processed. 
Jun 01 2012 11:39:02 Script still running... 0 processed. 
Jun 01 2012 11:40:02 Script still running... 0 processed. 
Jun 01 2012 11:41:02 Script still running... 0 processed. 
Jun 01 2012 11:42:02 Script still running... 0 processed. 
Jun 01 2012 11:43:02 Script still running... 0 processed. 
Jun 01 2012 11:44:02 Script still running... 0 processed. 
Jun 01 2012 11:45:02 Script still running... 0 processed. 
Jun 01 2012 11:46:02 Script still running... 0 processed. 
Jun 01 2012 11:47:02 Script still running... 0 processed. 
Jun 01 2012 11:48:02 Script still running... 0 processed. 
Jun 01 2012 11:49:02 Script still running... 0 processed. 
Jun 01 2012 11:50:02 Script still running... 0 processed. 
Jun 01 2012 11:50:02 cron.processQueue.php has ended. Processed 0 items. 

但是,如果隊列中有100個項目(隊列以大約1項目中的第二被處理),腳本完成所有項目,給它最後一個「腳本的輸出仍運行...「然後停止。由於此腳本在cron上運行,因此日誌中列出的下一個項目是「cron.processQueue.php已啓動。」這裏有一個例子:

May 31 2012 16:30:01 pullData.php has started. 
May 31 2012 16:31:18 Script still running... 60 processed. 
May 31 2012 16:32:33 Script still running... 120 processed. 
May 31 2012 16:33:48 Script still running... 180 processed. 
May 31 2012 16:35:03 Script still running... 240 processed. 
May 31 2012 16:36:19 Script still running... 300 processed. 
May 31 2012 16:37:34 Script still running... 360 processed. 
May 31 2012 16:38:50 Script still running... 420 processed. 
May 31 2012 16:40:05 Script still running... 480 processed. 
May 31 2012 16:41:21 Script still running... 540 processed. 
May 31 2012 16:42:36 Script still running... 600 processed. 
May 31 2012 16:43:51 Script still running... 660 processed. 
May 31 2012 16:45:05 Script still running... 720 processed. 
May 31 2012 16:46:22 Script still running... 780 processed. 
May 31 2012 16:47:37 Script still running... 840 processed. 
May 31 2012 16:48:52 Script still running... 900 processed. 
May 31 2012 16:50:09 Script still running... 960 processed. 
May 31 2012 16:51:31 Script still running... 1020 processed. 
May 31 2012 16:52:46 Script still running... 1080 processed. 
May 31 2012 16:54:01 Script still running... 1140 processed. 
May 31 2012 16:55:16 Script still running... 1200 processed. 
May 31 2012 16:56:32 Script still running... 1260 processed. 
May 31 2012 16:57:47 Script still running... 1320 processed. 
May 31 2012 16:59:02 Script still running... 1380 processed. 
May 31 2012 17:00:17 Script still running... 1440 processed. 
May 31 2012 17:01:33 Script still running... 1500 processed. 
May 31 2012 17:02:48 Script still running... 1560 processed. 
May 31 2012 17:30:01 cron.processQueue.php has started. 

我不明白爲什麼它必須經過一些項目,然後有沒有項目,腳本的一個運行中我的過程沒有結束。我真的很抱歉,如果這沒有任何意義,但任何洞察力將不勝感激!

回答

1

的問題絕對是while循環:

while(time() < $expireOn) { 

此循環將一直運行,直到時間到期,並且它不會考慮隊列的狀態。你需要做的是這樣的:

$continue = true; 
while(time() < $expireOn && !($continue === false)) { 

    if($continue = $consumer->processQueueItem()) 

這將導致while循環停止一次$consumer->processQueueItem()回報false

0

我敢打賭問題出在$ consumer-> processQueueItem()。它可以做的工作,但你可能不返回TRUE(在或許不是任何值都[空]),讓您的項目計數器永遠不會增加