Чего я хочу достичь Я хочу выполнить какой-нибудь скрипт, если он не запущен на сервере. поэтому для этого я готовлю команду в сценарии оболочки и выполняю ее в одной строке.
Команда с переменной 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
у нас есть один процесс-демон с запуском каждые 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
@ Nic3500 - Разве этот пакет также не создает команды оболочки? В общем, он просто переместил бы звонок из одного места в другое? Что касается grep, if then else, я сомневаюсь, что это повлияет на производительность, если они будут в PHP и CLI.
@MagnusEriksson; действительно могло быть, в коде не копался. CLI должен запускать оболочку для выполнения каждой команды, обработка текста (или массивов здесь) намного быстрее в PHP, чем запуск группы оболочек. Иногда я переписываю длинные сценарии bash на Perl (или другой язык), и разница просто безумная! Поэтому я предлагаю как можно меньше делать в bash, когда важна скорость.
@ Nic3500 - Я полностью согласен с использованием другого языка для управления процессами. PHP на самом деле не оптимизирован для этого. Просто хотел отметить, что рекомендуемый вами пакет также выполняет вызовы CLI, поэтому от его использования не так много пользы :-)
@MagnusEriksson: действительно, я удалил свой комментарий, следует переписать.
Чтобы сократить время обработки, вам нужно сделать в PHP как можно больше и уменьшить количество команд оболочки. Но зачем вообще использовать PHP для управления процессами? Если скорость имеет решающее значение, посмотрите на постройку или поиск чего-нибудь в C.
мое приложение - php и должно основываться на скриптах. поэтому я решил уменьшить функцию php и начать комбинировать функции, чтобы посмотреть, как это звучит.
Я тоже сталкивался .... но он не работает должным образом, ps auxww | grep -v grep | grep /home/new_jig.php && php /home/new_jig.php test_51 1714052. Здесь с &&, если выполняется первая команда, то выполняется только следующая команда. Мне не нужен вывод, но я хочу условное выполнение, если с первой команды (только тогда процесс не запущен на сервере) выполнить следующую команду.






каким-то образом я могу заставить его выполнить следующую команду
$ 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 секунд