Почему laravel задания не останавливаются, даже если я останавливаю супервизора? - PullRequest
0 голосов
/ 21 января 2020

У меня есть следующее 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

У вас есть идеи, почему это происходит?

1 Ответ

0 голосов
/ 21 января 2020
while (true) {
    App\Jobs\DelayJobTestJob::dispatch();
}

- это бесконечное число l oop, оно поставит sh заданий в очередь без конца.

Команда down приостанавливает работу планировщика, поэтому они прекращают работу.

https://laravel.com/docs/5.8/scheduling#maintenance -режим

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...