public function executeJobs($schedule = null) { if (!Mage::getStoreConfig('jobqueue/config/enabled')) { return; } if ($schedule) { $jobsRoot = Mage::getConfig()->getNode('crontab/jobs'); $jobConfig = $jobsRoot->{$schedule->getJobCode()}; $queue = $jobConfig->queue; if ($queue) { $this->setQueue($queue); } } $this->setupDJJob(); try { $collection = Mage::getModel('jobqueue/job')->getCollection(); $collection->addFieldToFilter('queue', array('eq' => $this->getQueue()))->addFieldToFilter('run_at', array(array('null' => true), array('lteq' => now())))->addFieldToFilter(array('locked_at', 'locked_by'), array(array('locked_at', 'null' => true), array('locked_by', 'eq' => $this->workerName)))->addFieldToFilter('failed_at', array('null' => true))->addFieldToFilter('attempts', array('lt' => (int) Mage::getStoreConfig('jobqueue/config/max_attempts'))); // randomly order to prevent lock contention among workers $collection->getSelect()->order(new Zend_Db_Expr('RAND()')); $collection->load(); foreach ($collection as $row) { $job = new DJJob($this->workerName, $row->getId(), array("max_attempts" => Mage::getStoreConfig('jobqueue/config/max_attempts'))); if ($job->acquireLock()) { $job->run(); } } } catch (Exception $e) { Mage::logException($e); } }