Laravel schedular: выполнять команду каждую секунду

У меня есть проект, который должен постоянно отправлять уведомления через WebSockets. Он должен подключиться к устройству, которое возвращает общий статус в строчном формате. Система обрабатывает его, а затем отправляет уведомления на основе различных условий.

Поскольку планировщик может повторять задачу уже через минуту, мне нужно найти способ выполнить функцию каждую секунду.

Вот мое app/Console/Kernel.php :

 <?php ... class Kernel extends ConsoleKernel { ... protected function schedule(Schedule $schedule) { $schedule->call(function(){ // connect to the device and process its response })->everyMinute(); } } 

PS: Если у вас есть идея справиться с ситуацией, поделитесь своими мыслями.

Related of "Laravel schedular: выполнять команду каждую секунду"

Обычно, когда вы хотите больше детализации, чем 1 минуту, вам нужно написать демона.

Я советую вам попробовать, теперь это не так сложно, как это было несколько лет назад. Просто начните с простого цикла внутри команды CLI:

 while (true) { doPeriodicStuff(); sleep(1); } 

Одна важная вещь: запустить демон через супервизор . Вы можете взглянуть на статьи о настройке слушателя очереди Laravel, он использует тот же подход (демон + супервизор). Раздел конфигурации может выглядеть так:

 [program:your_daemon] command=php artisan your:command --env=your_environment directory=/path/to/laravel stdout_logfile=/path/to/laravel/app/storage/logs/your_command.log redirect_stderr=true autostart=true autorestart=true 
 $schedule->call(function(){ while (some-condition) { runProcess(); } })->name("someName")->withoutOverlapping(); 

В зависимости от того, как долго runProcess() , вы можете использовать sleep(seconds) для более точной настройки.

some-condition обычно является флагом, который вы можете изменить в любое время, чтобы иметь контроль над бесконечным циклом. например, вы можете использовать file_exists(path-to-flag-file) для ручного запуска или остановки процесса в любое время.

Вы можете попробовать и дублировать задания каждую секунду * 60 раз, используя сон (1).