2017-07-20 7 views
0

私は1時間おきに実行する必要がある複数のタスクがあります。 上記のタスクのすべてはかなりの時間、これらのタスクを並列に実行されていないことの結果から、思わ&を消費している:それらのすべてがLaravel:タスクスケジューリング[並行]

$schedule->command('email:notifications1') 
      ->cron('15 * * * * *'); 
$schedule->command('email:notifications2') 
      ->cron('15 * * * * *'); 
$schedule->command('email:notifications3') 
      ->cron('15 * * * * *'); 

発行cronジョブとしてcomamndsの下に使用してLaravel経由でスケジュールされています。また、各タスクは前回の終了後に実行されます。

Requirment どうすれば並列で実行できますか?私はすべてのタスクをクロックが指定された時刻になるとすぐに(並行して)実行するようにします。

Laravelバージョン5

答えて

1

LaravelスケジューラがためだけでPHPの制限の時に1つのコマンドを実行することができます。

ただし、crontabファイルをcrontabファイルに直接追加することもできます。このようにして、別々のプロセスで並列に実行されます。

15 * * * * * php /path/to/artisan email:notifications1 
15 * * * * * php /path/to/artisan email:notifications2 
15 * * * * * php /path/to/artisan email:notifications3 


この問題を解決する別の方法は、ジョブが別の時に開始させることです。新しいPHPプロセスはcronジョブによって毎分起動されるため、これらは互いに影響しません。例えば

$schedule->command('email:notifications1') 
      ->cron('5 * * * * *'); 
$schedule->command('email:notifications2') 
      ->cron('10 * * * * *'); 
$schedule->command('email:notifications3') 
      ->cron('15 * * * * *'); 
+0

最初のオプションは、私の場合のためによく働いています。 2番目のオプションが期待通りに機能しません。助けてくれてありがとう。 – Knight

関連する問題