Ответ 1
Перезапустите Beanstalk. На Ubuntu:
sudo service beanstalkd restart
Я добавил некоторые задания в очередь в laravel. Однако я забыл поставить $job->delete()
в функцию, и в моей функции также есть ошибка. Это означает, что работа никогда не заканчивается. Он продолжает входить в него и сохраняет ошибки в моем файле журнала. Как я могу удалить его из командной строки?
Я использую beanstalkf для моей очереди.
Перезапустите Beanstalk. На Ubuntu:
sudo service beanstalkd restart
Я использую Redis вместо Beanstalkd, но это должно быть одинаковым в обоих. Перезапуск Redis не решает проблему. Я просмотрел RedisQueues
в Larvel 4.2 API Docs и нашел:
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');
});
ПРИМЕЧАНИЕ. Перезагрузите страницу один раз для каждой очереди.
Очередь была снята со стека. Я хотел бы видеть более чистое решение, но это работало для меня не один раз.
* dd ($ var) = Laravel die и dump function = die (var_dump ($ var))
Изменить 1: Для Redis
Вышеприведенное, очевидно, не лучшее решение, поэтому лучше. Быть осторожен!
FLUSHDB - удалить все ключи выбранной БД. Эта команда никогда не сработает.
Для Redis используйте FLUSHDB. Это приведет к сбою базы данных Redis, а не базы данных Laravel. В терминале:
$ redis-cli
127.0.0.1:6379> FLUSHDB
OK
127.0.0.1:6379> exit
Я сделал команду artisan, которая очистит все задания в вашей очереди. Вы можете дополнительно указать соединение и/или канал.
Только так я мог это сделать, это перезагрузить компьютер. Не удалось найти способ удалить задание.
Я использовал эту консоль веб-админ-центра php в прошлом.
В противном случае, я полагаю, вы обнаружите, что используете Terminal + telnet, но я не могу найти документацию для удаления через telnet (просто просмотр списка заданий в очереди).
Кажется, что в большинстве статей вам предлагается использовать вашу библиотеку кода + и обходить вакансии очередей, чтобы удалить их в этой ситуации.
Вот совместимая с Laravel 5.1 , которая позволяет очистить очередь Beanstalkd. Команда принимает имя очереди как аргумент (по умолчанию -" по умолчанию"). Не забудьте зарегистрировать его в app/Console/Kernel.php
Важное примечание: это решение работает только для 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
.
Например, если вы хотите удалить 100 готовых заданий из трубки queue_name
, вы можете сделать следующее:
for i in {1..100}; do beanstool delete -t queue_name --state=ready; done