У меня есть Kernel.php, имеющий много разных команд, определенных следующим образом:
(Laravel v5.5. *)
<?php
.....
protected function schedule(Schedule $schedule)
{
$fileCronLog = '/var/log/laravel-scheduler.log';
$schedule->command('do:something params...')->everyFiveMinutes()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyMinute()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyTenMinutes()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyFiveMinutes()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyTenMinutes()->appendOutputTo($fileCronLog);
$schedule->command('do:something params...')->everyThirtyMinutes()->appendOutputTo($fileCronLog);
.......
Я заметилиногда бывает так, что некоторые процессы / команды вообще не запускаются ...
И это соответствует командам с меньшей частотой, таким как: everyTenMinutes
, everyThirtyMinutes
.....
Я полагаю, что когда crontab запускает Laravel schedule:run
, Laravel, возможно, ставит во внутреннюю очередь все запланированные команды ... и, возможно, первые команды обрабатываются дольше, чем одна минута ... поэтому, когда пришло времякоманда everyTenMinutes
время прошло, и Ларавел пропустил выполнение ....
Это так? Или, может быть, Laravel просто через некоторое время откажется от планирования обработки, если перегружен?
Я уже заметил, что Laravel не разветвляет процесс php, а последовательно выполняет их. И в прошлом я решил эту проблему, распараллеливая выполнение некоторых команд непосредственно в crontab ...
Как я могу преодолеть это? Есть ли способ или вариант, который я могу использовать непосредственно на платформе?