Закрыть предыдущий процесс PHP CLI в фоновом режиме открыл laravel artisan - PullRequest
0 голосов
/ 25 апреля 2018

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

1 Ответ

0 голосов
/ 25 апреля 2018

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...