d228a501dc
Задача 5: RunAutopodborStudyJob::handle() оборачивает существующее тело в try/finally — после ЛЮБОГО завершения прогона (done/empty/failed, включая проброшенное исключение) распорядитель AutopodborStudyScheduler::tick() берёт следующего кандидата с освободившейся дорожки шага 2. Задача 6: artisan autopodbor:study-tick — крон-страховка раз в минуту на случай, если дорожка освободилась не через завершение джобы. Без withoutOverlapping() — требует таблицу cache_locks, которой нет в схеме (см. комментарий в routes/console.php); overlap уже защищён внутренним Cache::lock в AutopodborStudyScheduler::tick().
23 lines
584 B
PHP
23 lines
584 B
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use App\Services\Autopodbor\AutopodborStudyScheduler;
|
|
use Illuminate\Console\Command;
|
|
|
|
class AutopodborStudyTickCommand extends Command
|
|
{
|
|
protected $signature = 'autopodbor:study-tick';
|
|
|
|
protected $description = 'Страховка: если дорожка шага 2 свободна, а очередь не пуста — запустить следующего.';
|
|
|
|
public function handle(AutopodborStudyScheduler $scheduler): int
|
|
{
|
|
$scheduler->tick();
|
|
|
|
return self::SUCCESS;
|
|
}
|
|
}
|