Skip to content

Cron task for Laravel schedule with sub-minute repeating skip a next minute running #49488

Closed
@alexsmirnovdotcom

Description

@alexsmirnovdotcom

Laravel Version

10.4.1

PHP Version

8.2

Database Driver & Version

No response

Description

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.
I have no any errors in logs.

Crontab file:

* * * * * php /var/www/api/artisan schedule:run >> /var/www/api/storage/logs/cron.log 2>&1

\App\Console\Kernel.php:

<?php

namespace App\Console;

use App\Jobs\OneC\SyncChangesFrom1C;
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Support\Facades\Log;

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.
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 [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

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?

Steps To Reproduce

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions