2011-09-09 70 views
2

出於某種原因,該代碼模塊的config.xml:Magento的:安裝的cronjob每2小時

<jobs> 
    <stockupdate> 
     <schedule><cron_expr>0 */2 * * *</cron_expr></schedule> 
     <run><model>stockupdate/cron::start</model></run> 
    </stockupdate> 
</jobs> 

不起作用。儘管在改變*/2*之後似乎都沒有問題。

爲了測試它,我首先做一個TRUNCATE cron_schedule,然後清理緩存rm -rf var/cache然後運行php cron.php然後SELECT * FROM cron_schedule,看看作業調度。

我知道那裏也有討厭的方式0 0,2,4,6,8,10,12,14,16,18,20,22 0 0 0但這是一個非常不雅的解決方案。

那麼我如何告訴Magento每2小時運行一次這個任務?

+0

'0/2'怎麼樣? – ajreal

+0

儘管沒有多大意義,但我只是對它進行了測試。不起作用 – s3v3n

+0

'0/2'是標準的crontab語法。我給了一個通行證,因爲這真的取決於Magneto如何處理crontab。 – ajreal

回答

1

你可以使用

<schedule><cron_expr>0 * * * *</cron_expr></schedule>

和你的代碼,支票甚至數小時。不優雅,但它會工作。如果需要進行配置,您可以添加一個配置選項來控制它在幾小時內運行的頻率。

更新:在matchCronExpression方法

Mage_Cron_Model_Schedule

// handle modulus 
    if (strpos($expr,'/')!==false) { 
     $e = explode('/', $expr); 
     if (sizeof($e)!==2) { 
      throw Mage::exception('Mage_Cron', "Invalid cron expression, expecting 'match/modulus': ".$expr); 
     } 
     if (!is_numeric($e[1])) { 
      throw Mage::exception('Mage_Cron', "Invalid cron expression, expecting numeric modulus: ".$expr); 
     } 
     $expr = $e[0]; 
     $mod = $e[1]; 
    } else { 
     $mod = 1; 
    } 

    // handle all match by modulus 
    if ($expr==='*') { 
     $from = 0; 
     $to = 60; 
    } 
    // handle range 
    elseif (strpos($expr,'-')!==false) { 
     $e = explode('-', $expr); 
     if (sizeof($e)!==2) { 
      throw Mage::exception('Mage_Cron', "Invalid cron expression, expecting 'from-to' structure: ".$expr); 
     } 

     $from = $this->getNumeric($e[0]); 
     $to = $this->getNumeric($e[1]); 
    } 
    // handle regular token 
    else { 
     $from = $this->getNumeric($expr); 
     $to = $from; 
    } 

    if ($from===false || $to===false) { 
     throw Mage::exception('Mage_Cron', "Invalid cron expression: ".$expr); 
    } 

    return ($num>=$from) && ($num<=$to) && ($num%$mod===0); 

它是建立妥善處理*/2。

+0

這就是我已經做到的。但是我在這裏發佈了這個問題,以找出可能有一個每2小時任務的方法。無論如何感謝張貼。 – s3v3n

+0

更新了答案,因爲我去了並查看了cron/schedule Model –

+0

對不起,我現在不能在Magento內核上查看此代碼的上下文。我很確定Magento正確處理cron表達式的第一個參數(即分鐘)上的模數表達式。我可以肯定的是,我的測試在第二個小時失敗了。 – s3v3n

0

嘗試設置的cron任務*/02

+0

此代碼'$ e = explode('/',$ expr); /*...*/ $ expr = $ e [0]; $ mod = $ e [1]; /*...*/ return /*...*/&&($ num%$ mod === 0);'(來自其他問題)肯定會將其轉換爲數字值。還沒有測試過,但我沒有給它很多機會。=/ – s3v3n

1

每2小時不間斷使用的表達

<schedule><cron_expr>0 */2 * * *</cron_expr></schedule> 

如果設置

<schedule><cron_expr>* */2 * * *</cron_expr></schedule> 

你會得到,該任務將sheduled每秒鐘每分鐘一次。第二小時60個任務,3d小時0個任務,4個小時60個任務等。

+0

Ятакжеипоставил。我是這樣設定的。無論如何,這是一個非常古老的問題。 – s3v3n