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 секунд.