Laravel 5 график работы каждые 30 секунд

Я использую расписание Laravel для запуска заданий cron.

В моем crontab я добавил (с правильным путем к моему проекту):

* * * * * php /path/to/artisan schedule:run >> /dev/null 2>&1

Теперь мой App\Console\Kernel.php выглядит так:

protected function schedule(Schedule $schedule)
{
        $schedule->command('investments:calculate_interests')->everyMinute();
        $schedule->call('\App\Http\Controllers\UsersController@testEvent')->everyMinute();
}

Используя это, я успешно выполняю задания каждую минуту. Но как я могу изменить его, чтобы запускать их каждые 10, 20 или 30 секунд?

2 ответа

Я решаю с этим за секунду:

public function handle()
{
    $count = 0;
    while ($count < 59) {
        $startTime =  Carbon::now();

        $this->travelsRequestsDriversRepository->beFreeRequestAfterTime();

        $endTime = Carbon::now();
        $totalDuration = $endTime->diffInSeconds($startTime);
        if($totalDuration > 0) {
            $count +=  $totalDuration;
        }
        else {
            $count++;
        }
        sleep(1);
    }


}

и в таблице cron добавить команду этого.

* * * * * /usr/local/php56/bin/php56 /home/hamshahr/domains/hamshahrapp.com/project/artisan taxis:beFreeTaxis 1>> /dev/null 2>&1

Это не работает, как предложил Алексей Мезенин, но он дал мне идею, где можно протестировать некоторые решения.

Вы можете добавить цикл с таймером, чтобы не

protected function schedule(Schedule $schedule)

но прямо в команду / событие или другое, что вы хотите зациклить.

Например, я выполнял команду, поэтому внутри команды я добавил:

public function handle()
{
        \App\Investment::calculate();
        sleep(30);
        \App\Investment::calculate();
}

И теперь моя команда работает каждые 30 секунд.

Другие вопросы по тегам