2016-11-17 5 views
0

안녕하세요, 작업 스케줄에 관한 질문이 있습니다. 여러 개의 컨트롤러가 있고 Laravel 작업 스케줄링을 사용하여 해당 컨트롤러에 대한 호출을 만들고 싶습니다. 서버에 cronjob 한 줄을 추가했습니다. kernel.php 파일에는 기본적으로 작동하는 코드가 있습니다.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 docs에 언급되지 않았지만 their API에 나열되어 있습니다.

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

을하고 도움이된다면 참조 :

당신은 각 $schedule 라인에 추가 할 수 있습니다. 그래도 withoutOverlapping()과 작동하는지 잘 모르겠습니다. PHP 7과 IIS를 사용하는 Laravel 5.2에 대해서는 테스트를 거의하지 않았으며 아무런 작업도 기록하지 않았습니다. 내부에 Log::info()이 있음에도 불구하고 아무 것도 기록되지 않았습니다. 또한 행복하게 작업이 완료되었는지 확인하지 않고 복수 artisan schedule:run 명령을 실행하게합니다.

( artisan 명령에 대해) 백그라운드 프로세스를 시작하기 위해 직접 심포니의 Process 클래스를 사용할 수

다른 가능성 : 스크립트가 중복 된 작업을 확인하지 않습니다이 경우

use Symfony\Component\Process\Process; 

[...] 

protected function schedule(Schedule $schedule) { 

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

withoutOverlapping()를 추가 할 수있다 충분하지 않다 - 뮤텍스를 추가/제거하고 예를 들어 자신의 메소드를 작성해야한다. 작업 자체.