В новых версиях Laravel добавлена возможность повтора
задач чаще чем раз в минуту.
При попытке запустить к примеру задачу которая выполняется через очередь и сделать повтор на каждые 10 секунд :
\App\Console\Kernel.php
protected function schedule(Schedule $schedule): void
{
Log::debug('SCHEDULE RUN');
$schedule->job(new SyncChangesFrom1C)->everyTenSeconds();
}
Все работает, но каждый раз пропускается минута.
Из логов Laravel:
[2023-12-25 08:22:01] local.DEBUG: SCHEDULE RUN
[2023-12-25 08:24:00] local.DEBUG: SCHEDULE RUN
[2023-12-25 08:26:00] local.DEBUG: SCHEDULE RUN
[2023-12-25 08:28:00] local.DEBUG: SCHEDULE RUN
Из логов Cron:
2023-12-25 08:26:00 Running [App\Jobs\OneC\SyncChangesFrom1C] .... 14ms DONE
2023-12-25 08:26:10 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 6ms DONE
2023-12-25 08:26:20 Running [App\Jobs\OneC\SyncChangesFrom1C] .... 10ms DONE
2023-12-25 08:26:30 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 5ms DONE
2023-12-25 08:26:41 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 3ms DONE
2023-12-25 08:26:51 Running [App\Jobs\OneC\SyncChangesFrom1C] .... 15ms DONE
2023-12-25 08:28:00 Running [App\Jobs\OneC\SyncChangesFrom1C] .... 39ms DONE
2023-12-25 08:28:10 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 3ms DONE
2023-12-25 08:28:21 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 2ms DONE
2023-12-25 08:28:31 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 2ms DONE
2023-12-25 08:28:41 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 5ms DONE
2023-12-25 08:28:51 Running [App\Jobs\OneC\SyncChangesFrom1C] ..... 2ms DONE
При этом если заменить на:
protected function schedule(Schedule $schedule): void
{
Log::debug('SCHEDULE RUN');
$schedule->job(new SyncChangesFrom1C)->everyMinute();
}
Все работает как надо.
Если судить по коду в ядре и документации, там простой бесконечный цикл в течение минуты...
Сам крон файл:
* * * * * php /var/www/api/artisan schedule:run >> /var/www/api/storage/logs/cron.log 2>&1
Всё работает в докере.
Указанный Job исполняется из очереди и если указать интервал >= минуте, скрипт выполняется как нужно.
В чём может быть причина того, что крон не запускает команду и пропускает минуту?
UPD: Создал
issue в репозитории Laravel