php process

hristonev

Well-Known Member
Здравейте,

Вчера ми се случи следната ситуация. PHP проект трябва да извика шел команда. След края на тази команда се вика отново php скрипт с параметри генерирани от първия php скрипт. Шел командата може да продължи работа часове... опитах се да вкарам нещата с pnctl_waitpid pnctl_fork работят за живота на скрипта. Тествах и други неща но без особен успех. Работя със Symfony, там много културна библиотека за процеси има. Синхронно работи "prg1 ; php scr1", асинхронно обаче не вика scr1. В крайна сметка си реших проблема със следната структура:

shell_exec("nohup sh -c 'prog1 --pram=xyx; php scr1 --param1=xxx' >/dev/null 2>&1 &")

Въпросът ми е дали има по елегантно решение?
 
Защо не ползваш някоя message queue библютечка(RabbitMQ) и разделяш цялата логика на отделни модули(micro services), които слушат за дадени съобщения?
 
Ами програма1 в случая е бинарна и не може да ми праща съобщения на скрипта. Разбирам, че е свършила и прочитам лога за да видя как :).
 
Здравейте,

Вчера ми се случи следната ситуация. PHP проект трябва да извика шел команда. След края на тази команда се вика отново php скрипт с параметри генерирани от първия php скрипт. Шел командата може да продължи работа часове... опитах се да вкарам нещата с pnctl_waitpid pnctl_fork работят за живота на скрипта. Тествах и други неща но без особен успех. Работя със Symfony, там много културна библиотека за процеси има. Синхронно работи "prg1 ; php scr1", асинхронно обаче не вика scr1. В крайна сметка си реших проблема със следната структура:

shell_exec("nohup sh -c 'prog1 --pram=xyx; php scr1 --param1=xxx' >/dev/null 2>&1 &")

Въпросът ми е дали има по елегантно решение?

Разбира се че има по-елегантно решение.Премисли цялото нещо отново. Абсурдно е команда да продължи работа с часове. Абсолютно нелогично без значение какво правиш.
Другото нещо е изпълнението на shell_exec. На повечето места това е забранено и не се препоръчва да се ползва за web сайтове поради разбираеми причини.Които си е патил тои знае.

Ако ще ползваш shell-a си има bash за него или perl.Всичко друго е нерешение на нищо и мазане.

С други думи проблема ти е в проектирането на задачата.
 
Разбира се че има по-елегантно решение.Премисли цялото нещо отново. Абсурдно е команда да продължи работа с часове. Абсолютно нелогично без значение какво правиш.
Другото нещо е изпълнението на shell_exec. На повечето места това е забранено и не се препоръчва да се ползва за web сайтове поради разбираеми причини.Които си е патил тои знае.

Ако ще ползваш shell-a си има bash за него или perl.Всичко друго е нерешение на нищо и мазане.

С други думи проблема ти е в проектирането на задачата.
Да си представим, че не правя уеб сайт а уеб базирано приложение. Да си представим, че имаме само един UI, който е малка част от проекта (другото ми е под CLI).
Относно команда продължаваща часове... че командата може да продължава и дни :) ако има какво да прави. Ако сваляш данни от туитър, фейсбук, адуордс АПИ-тата и искаш данни за няколко години, съм чакал няколко дни. Относно това че е забранена команда от админите, да така е но не и на впс, нает сървър.
В общи линии се опитвам да кажа, че сте чували някакви митове и легенди и вадите генерални изводи за хода на вселената... Не се прави така хора. Има ли какво да кажеш по темата добре, ако не подминаваш.

ПП Повечето хостинг компании надали имат инсталирани и pthreads.
 
Не можеш ли да ползваш
nohup sh -c 'prog1 --pram=xyx && php scr1 --param1=xxx ?

Ако те интересува резултата от първата комада може да ползваш
nohup sh -c 'prog1 --pram=xyx | php scr1 --param1=xxx
 
За конкретната ми логика е без значение дали е ; или &&. Не ме интересува дали процеса е завършил с успех. Това го разбирам от неговия лог. На друго място ми предложиха да изнеса командите в баш скрипт, подавайки му параметри... това засега е най-доброто за тази ситуация. Така не мешам толкова php/bash и спагетите намаляват.
 
За конкретната ми логика е без значение дали е ; или &&. Не ме интересува дали процеса е завършил с успех. Това го разбирам от неговия лог. На друго място ми предложиха да изнеса командите в баш скрипт, подавайки му параметри... това засега е най-доброто за тази ситуация. Така не мешам толкова php/bash и спагетите намаляват.
А какъв реално ти е проблемът?
 

Горе