1
我想使用cronjob導入產品。但問題是當導入作業同時運行兩次時。 我該如何保護這些? 我嘗試這樣做:檢查magento是否已經運行cronjob
private function isImportAlreadyRunning()
{
$isRunning = false;
$cronSchecduleCollection = Mage::getModel('cron/schedule')->getCollection()
->addFieldToSelect(array('job_code', 'status'))
->addFieldToFilter('job_code', array('eq' => 'my_import_products'))
->addFieldToFilter('status', array('eq' => 'pending'))
->addFieldToFilter('executed_at', array('neq' => 'NULL'))
->load();
Mage::log('Cron size: ' .$cronSchecduleCollection->getSize());
if($cronSchecduleCollection->getSize() > 1)
{
$isRunning = true;
}
return $isRunning;
}
但這些不工作,因爲$ cronSchecduleCollection->的getSize()是等於1,即使我同時運行2個過程。 Class是單身人士,因爲它屬於Helper。
事務處理的答案,但如果停止的cronjob什麼,從不釋放臺 - 的情況下,當進口時間過長? – Milos 2014-09-11 10:47:33
對於延遲感到抱歉,我是在度假,但鎖定是釋放與release_lock或當連接關閉。在腳本運行時,連接處於活動狀態,這意味着如果腳本死亡或被殺死,連接將關閉並釋放鎖定。希望能幫助到你。如果導入很長,那麼最好不要爲數據的一致性啓動一個新導入。如果你的問題是「db是否鎖定了所有內容?」,答案是否定的,只有具有該名稱的「鎖定」纔是。 – 2014-09-23 12:48:04
Tnx的回覆,但我解決了這個問題,使用文件來鎖定:http://stackoverflow.com/questions/10552016/how-to-prevent-the-cron-job-execution-if-it-is-already-running ?lq = 1 – Milos 2014-09-23 13:24:42