Windows — закрыть предыдущий процесс PHP CLI в фоновом процессе были открыты laravel artisan

В одном из наших проектов 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, который потребляет больше памяти.

0

Решение

Я вижу здесь наконец два варианта:

  1. С помощью вашего процесса PHP проверьте, запущен ли уже другой. Если это так — просто долго информация и залог. Если это не так — продолжайте выполнение. Таким образом, вы можете сохранить планировщик, чтобы попытаться запустить процесс, как каждую минуту или около того. Если предыдущий процесс умирает, он будет перезапущен в течение одной минуты.

  2. Используйте какой-нибудь руководитель процесса. Я нашел что-то вроде этого для Windows: winss. Предполагается работать аналогично S6. Затем он убедится, что запущен только один экземпляр, и автоматически перезапустит его, когда он умрет. Другой супервизор — супервизор — его можно запустить через Cygwin. Посмотрите на этот так ответ: Есть ли Windows аналог супервизора?

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]