структура каталогов для заданий в очереди (задания cron) в zend framework

Я нашел довольно много сообщений, связанных со структурой каталогов и заданиями cron в Zend Framework, и до сих пор не получил четкого ответа :(

У меня есть следующий код для создания задания, которое отправляет электронное письмо. Работает отлично, пока скрипт (emailNotification.php) находится в /jobs в общедоступном каталоге.

public function emailAction() {

    $request = $this->getRequest();
    if ($request->isPost()) {

        $emailFrom = $request->getPost('emailFrom');
        $messageFrom = $request->getPost('messageFrom');
        $subject = $request->getPost('Sub');
        $emailTo = $request->getPost('emailTo');

        // create a queued job
        date_default_timezone_set('UTC');            
        $q = new ZendJobQueue();
        $ts = date('Y-m-d H:i:s', time()+30);
        $id=$q->createHttpJob('jobs/emailNotification.php',array('emailFrom'=>$emailFrom,
                'messageFrom'=>$messageFrom,'subject'=>$subject,
                'emailTo'=>$emailTo),
                array('name'=>'email notification using a single job execution scheduled to run after 30 seconds','schedule_time'=>$ts));

        if(!$id)
            $this->_helper->json(array('status' => 'success', 'message' => "Queued job didn't work."));

        $this->_helper->json(array('status' => 'success', 'message' => "Email sent successfully."));
    } // request->isPost()

}// function emailAction

Моя структура каталогов — это структура по умолчанию, созданная ZF:

  [MyProject]
     [application]
     [data]
     [docs]
     [library]
     [public]
        index.php
     [scripts]

Как изменить createHttpJob для запуска скрипта из другого каталога, скажем, scripts/jobs вместо public/jobs? Есть ли что-нибудь еще, что я должен делать?


person S D    schedule 29.05.2012    source источник


Ответы (1)


Это действительно зависит от того, как вы вызываете задание cron и сколько вы выполняете загрузку в начале этого скрипта (если есть). Я бы изменил ваш код на:

$id=$q->createHttpJob(APPLICATION_PATH.'/../scripts/jobs/emailNotification.php', [...]

для начала все, что вам нужно сделать, это убедиться, что APPLICATION_PATH установлен в вашем сценарии cron.

person Tim Fountain    schedule 29.05.2012
comment
не работает :( Вот пример того, что я реализовал. Скрипт cron довольно прост: просто функция. files.zend.com/help/previous-version/Zend-Server-5-IBMi/ - person S D; 29.05.2012