web-dev-qa-db-ja.com

laravelでキューに入れられたジョブを削除する

Laravelのキューにいくつかのジョブを追加しました。しかし、関数に$job->delete()を入れるのを忘れており、関数にもエラーがあります。これは、仕事が決して終わらないことを意味します。それはそれに入り続け、私のログファイルでエラーを出し続けます。コマンドラインから削除するにはどうすればよいですか?

キューイングにはbeanstalkfを使用しています。

17
Claire

Beanstalkを再起動します。 Ubuntuの場合:

Sudo service beanstalkd restart
26
Jerome Jaglale

私はBeanstalkdの代わりにRedisを使用していますが、これは両方で同じになるはずです。 Redisを再起動しても問題は解決しません。 Laravel 4.2 API DocsRedisQueuesを調べたところ、次のことがわかりました。

public Job|null pop(string $queue = null)
  //Pop the next job off of the queue.

これは、BeanstalkedQueueを見ても同じです。

app/routes.php dd *内で、そのページと出来上がりをロードしました。

Route::get('/', function() {
  dd(Queue::pop());
  #return View::make('hello');
});

注:キューごとに1回ページをリロードします。

キューはスタックから削除されました。よりクリーンな解決策を見たいと思っていますが、これは私にとって2回以上うまくいきました。

* dd($ var)= Laravelのダイとダンプ関数= die(var_dump($ var))

編集1:Redisの場合

上記は明らかに最良の解決策ではないので、ここでより良い方法があります。注意してください!

FLUSHDB-現在選択されているDBのすべてのキーを削除します。このコマンドが失敗することはありません。

Redisには [〜#〜] flushdb [〜#〜] を使用します。これにより、Laravelのデータベースではなく、Redisデータベースがフラッシュされます。ターミナルで:

$ redis-cli
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> exit
26
DutGRIFF

キュー内のすべてのジョブをクリアする職人コマンドを作成しました。オプションで、接続やパイプを指定できます。

https://github.com/morrislaptop/laravel-queue-clear

2
morrislaptop

重要な注意:このソリューションはbeanstalkでのみ機能します

2つの解決策があります。

1-あなたからPHPコード

プログラムでジョブを削除するには、次のようにします。

    //Que the job first. (YourJobProcessor is a class that has a method called fire like `fire($job,$data)`
    $res = Queue::later(5, YourJobProcessor::class, $data, 'queue_name');
    //get the job from the que that you just pushed it to
    $job = Queue::getPheanstalk()->useTube("queue_name")->peek($res);
    //get the job from the que that you just pushed it to
    $res = Queue::getPheanstalk()->useTube("queue_name")->delete($job);

すべてが成功した場合、ジョブは実行されません。それ以外の場合、ジョブは5秒後に実行されます

2-コマンドラインから(LinuxおよびMacのみ)

コマンドラインから(LinuxおよびMacの場合) beanstool を使用できます。

たとえば、queue_nameチューブから100件の準備ができたジョブを削除する場合は、次の操作を実行できます。

  for i in {1..100}; do beanstool delete -t queue_name --state=ready; done
1
Ahmad Hajjar

ここにLaravel 5.1互換 コマンド があります。これにより、Beanstalkdキューをクリアできます。コマンドは引数としてキュー名を受け取ります(デフォルトでは「デフォルト」)。 app/Console/Kernel.phpに登録してください

0
cheelahim

私ができる唯一の方法は、コンピューターを再起動することでした。ジョブを削除する方法が見つかりませんでした。

0
Claire

私は過去に このphpベースのWeb管理コンソール を使用しました。

それ以外の場合は、ターミナル+ telnetを使用すると思いますが、telnetを使用して削除するためのドキュメントは見つかりません(キュー内のジョブのリストを表示するだけです)。

ほとんどの記事は 選択したコード+ライブラリを使用し、キュージョブをループする にこの状況で削除するように指示しているようです。

0
fideloper