2016-11-17 12 views
0

Привет У меня вопрос о планировании задач. У меня есть несколько контроллеров, и я хочу делать вызовы для этих контроллеров, используя планирование задач Laravel. Я добавляю одну строку cronjob в сервер. У меня есть такой код в файле kernel.php, который в основном работает.Задача планирования Paraller в Laravel

protected function schedule(Schedule $schedule) { 
    $schedule->call('App\Http\Controllers\[email protected]')->everyMinute()->name('firstController_cronjob')->withoutOverlapping(); 
    $schedule->call('App\Http\Controllers\[email protected]')->everyMinute()->name('secondController_cronjob')->withoutOverlapping(); 
    $schedule->call('App\Http\Controllers\[email protected]')->everyMinute()->name('thirdController_cronjob')->withoutOverlapping(); 
} 

Но у меня есть одна проблема. Этот скрипт запускается последовательно. Можно ли запускать контроллеры Laravel в качестве параллельной запланированной задачи?

+0

Не связано ли это с 'ShouldQueue'? – Mruf

+0

Я новичок в этом. Можете ли вы объяснить или привести пример? –

ответ

0

Существует способ runInBackground(), не упомянутый в документах Laravel, но указанный в their API.

Вы можете добавить его в каждой строке $schedule:

$schedule->...->runInBackground(); 

и посмотреть, если это помогает. Я не уверен, будет ли он работать с withoutOverlapping(). Я мало тестировал Laravel 5.2 с PHP 7 и IIS, и ни одна из задач не зарегистрировала ничего, несмотря на то, что внутри есть Log::info(). Он также с удовольствием позволяет выполнять несколько команд artisan schedule:run без проверки завершения задачи.


Другая возможность (для artisan команд) может быть использовать Process класс Symfony непосредственно начать фоновые процессы:

use Symfony\Component\Process\Process; 

[...] 

protected function schedule(Schedule $schedule) { 

    $schedule->call(function() { 
     return (new Process('php artisan test:test'))->start(); 
    })->everyMinute(); 
} 

В этом случае скрипт не будет проверять для перекрывающихся задач и добавление withoutOverlapping() может не хватает - вам нужно будет написать собственные методы для добавления/удаления мьютекса и запускать их в сама задача.

 Смежные вопросы

  • Нет связанных вопросов^_^