In last versions of laravel 10 was added sub-minute intervals.
But i have strange behavior of runnig of cron task.
All works in Docker with docker-compose.
Cron works in separate from laravel container.
Crontab file:
* * * * * php /var/www/api/artisan schedule:run >> /var/www/api/storage/logs/cron.log 2>&1
AppConsoleKernel.php:
<?php
namespace AppConsole;
use AppJobsOneCSyncChangesFrom1C;
use IlluminateConsoleSchedulingSchedule;
use IlluminateFoundationConsoleKernel as ConsoleKernel;
use IlluminateSupportFacadesLog;
class Kernel extends ConsoleKernel
{
/**
* Register the commands for the application.
*/
protected function commands(): void
{
$this->load(__DIR__ . '/Commands');
require base_path('routes/console.php');
}
/**
* Define the application's command schedule.
*/
protected function schedule(Schedule $schedule): void
{
Log::debug('SCHEDULE RUN');
$schedule->job(new SyncChangesFrom1C)->everyTenSeconds();
}
}
SyncChangesFrom1C is a queued job. Now handle method is empty.
Logs of 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
Logs of Cron:
2023-12-25 08:26:00 Running [AppJobsOneCSyncChangesFrom1C] .... 14ms DONE
2023-12-25 08:26:10 Running [AppJobsOneCSyncChangesFrom1C] ..... 6ms DONE
2023-12-25 08:26:20 Running [AppJobsOneCSyncChangesFrom1C] .... 10ms DONE
2023-12-25 08:26:30 Running [AppJobsOneCSyncChangesFrom1C] ..... 5ms DONE
2023-12-25 08:26:41 Running [AppJobsOneCSyncChangesFrom1C] ..... 3ms DONE
2023-12-25 08:26:51 Running [AppJobsOneCSyncChangesFrom1C] .... 15ms DONE
2023-12-25 08:28:00 Running [AppJobsOneCSyncChangesFrom1C] .... 39ms DONE
2023-12-25 08:28:10 Running [AppJobsOneCSyncChangesFrom1C] ..... 3ms DONE
2023-12-25 08:28:21 Running [AppJobsOneCSyncChangesFrom1C] ..... 2ms DONE
2023-12-25 08:28:31 Running [AppJobsOneCSyncChangesFrom1C] ..... 2ms DONE
2023-12-25 08:28:41 Running [AppJobsOneCSyncChangesFrom1C] ..... 5ms DONE
2023-12-25 08:28:51 Running [AppJobsOneCSyncChangesFrom1C] ..... 2ms DONE
If i`m change to everyMinute:
/**
* Define the application's command schedule.
*/
protected function schedule(Schedule $schedule): void
{
Log::debug('SCHEDULE RUN');
$schedule->job(new SyncChangesFrom1C)->everyMinute();
}
It work perfect, and run every minute.
Why it skip a minute before new run if used sub-minutes interval?