Выполнить команду bash if else в php (bash vs php)

Чего я хочу достичь Я хочу выполнить какой-нибудь скрипт, если он не запущен на сервере. поэтому для этого я готовлю команду в сценарии оболочки и выполняю ее в одной строке.

Команда с переменной php

$cmd = "if [[ `ps auxww | grep -v grep | grep ".$process_file." | grep '".$find."'`  == '' ]] ; then ".$cmd2."  fi";

echo $cmd."\n";

Выполняемая команда после замены переменных (что на самом деле будет работать в bash):

if [[ `ps auxww | grep -v grep | grep /home/new_jig.php | grep 'test_51 1714052'`  == '' ]] ; then  php /home/new_jig.php test_51 1714052 & fi;

выполнение команды

exec($cmd,$out,$res);

Обратите внимание, что я также разделил проблему на два оператора и выполнил их. Но это требует времени. Это вызывает проблемы, когда у меня в списке более 2000, и команда выполняется для всех. Чтобы перейти к последнему номеру, потребуется около 1 минуты или более 1 минуты.

Я хочу добиться этого за 10 секунд. Пожалуйста, помогите мне достичь оптимального результата.

Спасибо Jignesh

«Я хочу добиться этого за 10 секунд» - какая-то конкретная причина для этого магического числа? Вы также можете объяснить, что на самом деле делает сценарий? Вы также, кажется, выполняете какой-то PHP-код в своем сценарии bash. Что делает этот сценарий?
Magnus Eriksson 04.09.2018 12:47

у нас есть один процесс-демон с запуском каждые 3 секунды, который запускает несколько процессов php (2000+). для получения данных со сторонних веб-сайтов. В настоящее время проблема заключается в том, что если я использую следующие элементы, на то, чтобы добраться до конца, требуется больше минуты ... $ cmd = "ps auxww | grep -v grep | grep". $ Process_file. "| Grep". $ Find. "> / dev / null 2> & 1 "; exec ($ cmd, $ out, $ res); и на основе результата я выполняю что-то вроде ... php /home/new_jig.php test_51 1714052

Jignesh Rana 04.09.2018 13:12

@ Nic3500 - Разве этот пакет также не создает команды оболочки? В общем, он просто переместил бы звонок из одного места в другое? Что касается grep, if then else, я сомневаюсь, что это повлияет на производительность, если они будут в PHP и CLI.

Magnus Eriksson 04.09.2018 14:03

@MagnusEriksson; действительно могло быть, в коде не копался. CLI должен запускать оболочку для выполнения каждой команды, обработка текста (или массивов здесь) намного быстрее в PHP, чем запуск группы оболочек. Иногда я переписываю длинные сценарии bash на Perl (или другой язык), и разница просто безумная! Поэтому я предлагаю как можно меньше делать в bash, когда важна скорость.

Nic3500 04.09.2018 14:07

@ Nic3500 - Я полностью согласен с использованием другого языка для управления процессами. PHP на самом деле не оптимизирован для этого. Просто хотел отметить, что рекомендуемый вами пакет также выполняет вызовы CLI, поэтому от его использования не так много пользы :-)

Magnus Eriksson 04.09.2018 14:08

@MagnusEriksson: действительно, я удалил свой комментарий, следует переписать.

Nic3500 04.09.2018 14:09

Чтобы сократить время обработки, вам нужно сделать в PHP как можно больше и уменьшить количество команд оболочки. Но зачем вообще использовать PHP для управления процессами? Если скорость имеет решающее значение, посмотрите на постройку или поиск чего-нибудь в C.

Nic3500 04.09.2018 14:11

мое приложение - php и должно основываться на скриптах. поэтому я решил уменьшить функцию php и начать комбинировать функции, чтобы посмотреть, как это звучит.

Jignesh Rana 04.09.2018 15:23

Я тоже сталкивался .... но он не работает должным образом, ps auxww | grep -v grep | grep /home/new_jig.php && php /home/new_jig.php test_51 1714052. Здесь с &&, если выполняется первая команда, то выполняется только следующая команда. Мне не нужен вывод, но я хочу условное выполнение, если с первой команды (только тогда процесс не запущен на сервере) выполнить следующую команду.

Jignesh Rana 04.09.2018 15:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
9
232
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

каким-то образом я могу заставить его выполнить следующую команду

$ process_file = phpfile, который выполняет некоторые функции

$ cmd2 = "php ".$process_file." 1212 >/dev/null 2>/dev/null &";

$ cmd11 = "если ps -auxw | grep -v grep | grep '".$process_file."' | grep '".$find."' &> /dev/null; то эхо 1;". $ cmd2. "; fi";

shell_exec ($ cmd11. "> / dev / null 2> / dev / null &");

До этого: для 1100 запросов процесс занимал около 60+ секунд После этого: он завершается между От 20 до 30 секунд

Другие вопросы по теме