2016-05-06 8 views
3

Laravelが電子メールキューを自動的に処理するようにしようとしていますが、タスクスケジューラを動作させることはできません。問題は次のようである:Laravel 5タスクスケジューラ(メールキュー用)が動作しない

私はすでに正常データベーステーブル内、およびKernel.phpのジョブました:

:私はプロジェクトフォルダの下に、このコマンドを実行してきました、リモートサーバー上の

$schedule->command('queue:work')->everyMinute(); 

* * * * * php artisan schedule:run >> /dev/null 2>&1 

しかし、ジョブは依然としてテーブルに残っているため、スケジューラはまだ動作しません。手動で実行すると、

artisan queue:work 

メールが送信されます。

ここで何が間違っていますか?どうもありがとう!

答えて

1

まず、私はを提案します。あなたはlaravelのコマンドスケジューラを使用しないでください。

長所とlaravelのタスクスケジューラを使用しての短所:

賛否

あなたのcronタスクは、あなたのコードに埋め込まれます。サーバーを変更した場合、どのcronタスクがあったかを覚える必要はありません。

両論

のは、あなたが他のいくつかのcronタスクがあるとしましょう。タスクT1は毎分実行されますが、タスクT2は毎週実行され、タスクT3は毎週火曜日に実行されます。今すぐチェックするだけで、毎分キュースケジュール内のタスクがあるかどうかをチェックするデーモンが実行されます。また、キューはそれぞれのジョブとそれぞれのタイミングを尊重する必要があります。

代わりに、すべてのタスクに対して別々のコマンドを作成することができます。そして、それらのためにcronジョブを実行します。

しかし、あなたがしていたことをやりたい、あるいはあなたのcronタスクが実行されていなかった理由を知りたければ、ここであなたのプロジェクトディレクトリでartisanコマンドを実行することを忘れていたのです。

* * * * * cd path_to_your_laravel_project & php artisan schedule:run

+0

返信用のおかげで、私は一瞬のためにそれに固執したいと思います。しかし、あなたの解決策のために、私はすでにそれをしていないのですか? –

+0

いいえ、プロジェクトフォルダに「cd」を実行する必要があります。 – Abhishek

+0

ちょうどそれを考え出した - それはcrontabの私のひどい理解だった。単にそれを入力するだけでなく、テーブルにコマンドラインを手動で追加しておくべきだった。とにかくあなたの助言をありがとう:) –

関連する問題