В одном из наших проектов laravel в среде Windows нам нужен слушатель очереди. Таким образом, в начале мы передали следующую команду в командной строке, и это окно осталось открытым.
C:\Apache24\htdocs\laravel\artisan queue:listen --timeout=240
Но это не очень хороший шаг, потому что если кто-то ошибочно закрыл или после обновления системы, он может закрыться. Итак, мы запланировали фоновый процесс с планировщиком.
Мы запускаем командный файл во время запуска системы и каждые 1 час. Пакет имеет следующую команду.
start /MIN /B php C:\Apache24\htdocs\laravel\artisan queue:listen --timeout=240
Но через несколько дней после того, как мы исследовали диспетчер задач, мы заметили, что в фоновом процессе было запущено много PHP CLI, что привело к 100% использованию процесса. Система замедлилась. Поэтому мы дополнительно добавили команду, чтобы убить уже работающий PHP CLI. Пакетный файл был похож на приведенные ниже команды.
taskkill /f /fi "imagename eq php.exe"
start /MIN /B php C:\Apache24\htdocs\laravel\artisan queue:listen --timeout=240
Теперь нам нужно запустить другой фоновый процесс с интервалом в 1 минуту. Если он запускается каждую минуту, то запускается новый фоновый процесс PHP CLI. Если мы убьем весь прошлый фоновый процесс PHP CLI, он убьет уже работающий PHP CLI для artisan queue
.
Так что для этой зависимости, что было бы лучшим подходом для решения этой проблемы.
Наша главная цель - не будет запущен какой-либо фоновый процесс PHP CLI, который потребляет больше памяти.