У меня есть следующее supervisor.conf
, которое используется для запуска моих заданий:
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command= php artisan queue:work --sleep=5 --tries=5
autostart=true
autorestart=true
numprocs=4
stopwaitsecs=5
redirect_stderr=true
stdout_logfile=/home/ubuntu/laravel-worker.log
И я запускаю следующее задание:
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\Log;
class DelayJobTestJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function handle(): void
{
sleep(rand(5,6));
Log::channel('jobs')->debug("Job Termination test jobId: ".$this->job->getJobId());
}
}
Затем я имитирую отправку задания с помощью запуска на повозке:
while(true){ App\Jobs\DelayJobTestJob::dispatch(); }
Затем я пытаюсь прекратить свою работу с помощью:
sudo supervisorctl stop laravel-worker:*
Но даже если на suspervisor работы были остановлены (согласно журналам):
$ tail -f /home/vagrant/laravel-worker.log
[2020-01-21 11:58:44][57] Processed: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:44][61] Processing: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:44][58] Processed: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:44][62] Processing: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:46][59] Processed: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:46][63] Processing: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:49][61] Processed: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:49][64] Processing: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:49][60] Processed: App\Jobs\DelayJobTestJob
[2020-01-21 11:58:49][65] Processing: App\Jobs\DelayJobTestJob #Last Log
Задания продолжают отправляться:
[2020-01-21 12:07:28] local.DEBUG: Job Termination test jobId: 438
[2020-01-21 12:07:29] local.DEBUG: Job Termination test jobId: 439
[2020-01-21 12:07:31] local.DEBUG: Job Termination test jobId: 440
[2020-01-21 12:07:33] local.DEBUG: Job Termination test jobId: 441
[2020-01-21 12:07:33] local.DEBUG: Job Termination test jobId: 442
[2020-01-21 12:07:35] local.DEBUG: Job Termination test jobId: 443
[2020-01-21 12:07:36] local.DEBUG: Job Termination test jobId: 444
[2020-01-21 12:07:38] local.DEBUG: Job Termination test jobId: 446
[2020-01-21 12:07:39] local.DEBUG: Job Termination test jobId: 445
[2020-01-21 12:07:41] local.DEBUG: Job Termination test jobId: 447
[2020-01-21 12:07:42] local.DEBUG: Job Termination test jobId: 448
[2020-01-21 12:07:43] local.DEBUG: Job Termination test jobId: 449
[2020-01-21 12:07:44] local.DEBUG: Job Termination test jobId: 450
[2020-01-21 12:07:46] local.DEBUG: Job Termination test jobId: 451
[2020-01-21 12:07:48] local.DEBUG: Job Termination test jobId: 452
[2020-01-21 12:07:48] local.DEBUG: Job Termination test jobId: 453
[2020-01-21 12:07:50] local.DEBUG: Job Termination test jobId: 454
[2020-01-21 12:07:51] local.DEBUG: Job Termination test jobId: 455
[2020-01-21 12:07:53] local.DEBUG: Job Termination test jobId: 456
[2020-01-21 12:07:54] local.DEBUG: Job Termination test jobId: 457
[2020-01-21 12:07:56] local.DEBUG: Job Termination test jobId: 458
[2020-01-21 12:07:56] local.DEBUG: Job Termination test jobId: 459
[2020-01-21 12:07:59] local.DEBUG: Job Termination test jobId: 460
[2020-01-21 12:08:00] local.DEBUG: Job Termination test jobId: 461
[2020-01-21 12:08:01] local.DEBUG: Job Termination test jobId: 462
[2020-01-21 12:08:02] local.DEBUG: Job Termination test jobId: 463 # Last Log
Я понял это, потому что время последнего входа на канале jobs
превышает время супервизора, а время на 12:08:02
больше. чем время 11:58:49
, которое не соответствует 5-секундной разнице, которой, как я ожидаю, будет последнее задание.
Единственный способ прекращения отправки заданий после запуска:
php /var/www/html/artisan down
У вас есть идеи, почему это происходит?