Laravelのキューにいくつかのジョブを追加しました。しかし、関数に$job->delete()
を入れるのを忘れており、関数にもエラーがあります。これは、仕事が決して終わらないことを意味します。それはそれに入り続け、私のログファイルでエラーを出し続けます。コマンドラインから削除するにはどうすればよいですか?
キューイングにはbeanstalkfを使用しています。
Beanstalkを再起動します。 Ubuntuの場合:
Sudo service beanstalkd restart
私はBeanstalkdの代わりにRedisを使用していますが、これは両方で同じになるはずです。 Redisを再起動しても問題は解決しません。 Laravel 4.2 API Docs でRedisQueues
を調べたところ、次のことがわかりました。
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
キュー内のすべてのジョブをクリアする職人コマンドを作成しました。オプションで、接続やパイプを指定できます。
重要な注意:このソリューションはbeanstalkでのみ機能します
プログラムでジョブを削除するには、次のようにします。
//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秒後に実行されます
コマンドラインから(LinuxおよびMacの場合) beanstool
を使用できます。
たとえば、queue_name
チューブから100件の準備ができたジョブを削除する場合は、次の操作を実行できます。
for i in {1..100}; do beanstool delete -t queue_name --state=ready; done
ここにLaravel 5.1互換 コマンド があります。これにより、Beanstalkdキューをクリアできます。コマンドは引数としてキュー名を受け取ります(デフォルトでは「デフォルト」)。 app/Console/Kernel.phpに登録してください
私ができる唯一の方法は、コンピューターを再起動することでした。ジョブを削除する方法が見つかりませんでした。
私は過去に このphpベースのWeb管理コンソール を使用しました。
それ以外の場合は、ターミナル+ telnetを使用すると思いますが、telnetを使用して削除するためのドキュメントは見つかりません(キュー内のジョブのリストを表示するだけです)。
ほとんどの記事は 選択したコード+ライブラリを使用し、キュージョブをループする にこの状況で削除するように指示しているようです。