2016-06-07 5 views
0

저는 Laravel 5.2를 사용하고 있습니다. 현재 데이터베이스에서 수천 개의 행을 가져 와서 각 행에 대해 계산을 수행하는 cron 작업이 있습니다. cron 작업은 현재 실행하는 데 약 1 시간이 걸리지 만 데이터베이스는 매일 계속 커집니다.큰 cron 작업을 여러 cron 작업으로 분할하십시오.

하나의 옵션은 crontab -e을 사용하여 더 많은 cron 작업을 수동으로 추가하는 것입니다 (즉, 5 개의 작은 부분으로 작업을 분할하는 5 개의 cron 작업). 그러나 다음과 같은 작업을 수행 할 수도 있습니다.

  1. crontab -e을 사용하여 단일 cron 작업을 설정하십시오.
  2. cron 작업 스크립트는 데이터베이스의 모든 행을 가져오고 반환되는 행 수에 따라 더 많은 cron 작업을 분할해야 하는지를 결정합니다. 예를 들어, 데이터베이스가 1000 개의 행을 반환하면 10 개의 cron 작업으로 분할해야하지만 데이터베이스가 10000 개의 행을 반환하면 100 개의 cron 작업으로 분할해야합니다.

그래서 제 질문은, 그것은 PHP 스크립트 다음은 (기본적으로 PHP에서 더 많은 cron 작업을 호출로 분할되어야하는 더 cron 작업을 결정하는 경우, 단 하나의 cron 작업이 crontab -e에 나열된 가질 수 있습니다 스크립트)?

안전한가요? 이것에 접근하는 더 좋은 방법이 있습니까? 내가 대기열을 사용하는 것이 좋습니다 것입니다

class PostCron extends Command 
{ 
    /** 
    * The name and signature of the console command. 
    * 
    * @var string 
    */ 
    protected $signature = 'post_cron'; 

    /** 
    * The console command description. 
    * 
    * @var string 
    */ 
    protected $description = ''; 

    /** 
    * Execute the console command. 
    * 
    * @return mixed 
    */ 
    public function handle() 
    { 
     $posts = Post::all(); // currently returns ~1000 rows, but grows in size daily 

     foreach ($posts as $post) { 
      // computations on each separate post 
     } 
    } 
} 
+0

이 같은 여기에 참조 laravel queue

그래서 코드가 될 것입니다 뭔가 새로운 cron 작업을 생성하지 않습니다; 하지만 간단히 X 스크립트를 실행하는 것입니다. –

+0

@Dagon 그게 제가 의미하는 바입니다. –

답변

-1

:

여기에 내 현재 스크립트입니다. Beanstalkd처럼 그렇게 할 수있는 도구가 있습니다. 그런 다음 여러 작업을 대기열에 추가하는 하나의 cronjob이 있습니다.

0

작업을 생성하고 각 게시물을 대기열로 실행할 수 있습니다. 아래

protected $bus; 
/** 
* Create a new command instance. 
* 
* @return void 
*/ 
public function __construct(\Illuminate\Contracts\Bus\Dispatcher $bus) 
{ 
    parent::__construct(); 

    $this->bus = $bus; 
} 

public function handle() 
{ 
    $posts = Post::all(); // currently returns ~1000 rows, but grows in size daily 

    foreach ($posts as $post) { 
     // computations on each separate post 
     $this->bus->dispatch(new YourJobClassName($post)); 
    } 
} 
+0

내가하고있는 계산은 큐가 아닌 cron 작업에서 더 많은 이익을 얻습니다. 그들은 매 시간마다 운영해야하며 대기 시간에 한 시간 이내에 끝나기를 바라지 않고 추가해야합니다. –

+0

예, cron이 대기열에서 계산 작업을 실행합니다. 또한 대기열에 대한 프로세스 수를 동시에 설정하여 빠르게 만들 수 있습니다. https://laravel.com/docs/5.2/queues#supervisor-configuration. – xmhafiz

+0

여기 비슷한 문제 http://stackoverflow.com/questions/35906749/laravel-run-multiple-scheduled-tasks?rq=1 – xmhafiz

관련 문제