Laravel – Queues reporting as failed (even though they don’t)
I am using the latest version of Homestead.
I also have Laravel Horizon set up.
I am using redis as the queue driver.
What’s happening is my jobs are all failing (even though the job exits correctly).
I am running the job through command line by using a custom command:
vagrant@homestead:~/myapp$ artisan crawl:start
vagrant@homestead:~/myapp$ <-- No CLI errors after running
app/Console/Command/crawl.php
<?php
namespace MyAppConsoleCommands;
use IlluminateConsoleCommand;
use MyAppJobsCrawl;
class crawl extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'crawl:start';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Start long running job.';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
Crawl::dispatch();
}
}
app/Jobs/Crawl.php
<?php
namespace MyAppJobs;
use IlluminateBusQueueable;
use IlluminateQueueSerializesModels;
use IlluminateQueueInteractsWithQueue;
use IlluminateContractsQueueShouldQueue;
use IlluminateFoundationBusDispatchable;
class Crawl implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* The number of seconds the job can run before timing out.
*
* @var int
*/
public $timeout = 3600;
/**
* The number of times the job may be attempted.
*
* @var int
*/
public $tries = 1;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct()
{
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
$crawl = new Crawl();
$crawl->start();
}
}
app/Crawl.php
<?php
namespace MyApp;
class Crawl
{
public function start()
{
ini_set('memory_limit','256M');
set_time_limit(3600);
echo "Started.";
sleep(30);
echo "Exited.";
exit();
}
}
worker.log
[2018-03-21 10:14:27][1] Processing: MyAppJobsCrawl
Started.
Exited.
[2018-03-21 10:15:59][1] Processing: MyAppJobsCrawl
[2018-03-21 10:15:59][1] Failed: MyAppJobsCrawl
From Horizon’s failed job detail
Failed At 18-03-21 10:15:59
Error IlluminateQueueMaxAttemptsExceededException:
MyAppJobsCrawl has been attempted too many
times or run too long. The job may have previously
timed out. in /home/vagrant/app/vendor/laravel
/framework/src/Illuminate/Queue/Worker.php:396
laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /home/vagrant/myapp/artisan queue:work --sleep=3 --tries=1 --timeout=3600
autostart=true
autorestart=true
user=vagrant
numprocs=1
redirect_stderr=true
stdout_logfile=/home/vagrant/myapp/worker.log
Synopsis
Looking at my worker.log
I can see that the output from my class has worked:
Started.
Exited.
But the job is reported as failed. Why?
Any help is greatly appreciated!
from Laravel Questions and Answers https://laravelquestions.com/laravel/laravel-queues-reporting-as-failed-even-though-they-dont/
via Lzo Media
No comments:
Post a Comment