PDA

View Full Version : اجرا کردن چندین shell_exec در یک زمان



m.yazdian
یک شنبه 19 مرداد 1393, 07:37 صبح
دوستان وقتی با دستور Shell_exec برنامه vlc را اجرا می کنم که یک فایل صوتی را از یک فرمت به فرمت دیگری تبدیل کنه یک چند دقیقه ای تول می کشه و در حین انجام اون اگر بخواهم دوباره یک vlc دیگری را با shecll_exec فراخوانی کنم دیگه نمیشه....!!!! تا زمانی که اولین shell کارش تموم بشه.

آیا توی PHP فقط یک بار در هر لحظه میشه دستور shell را اجرا کرد و یا راهی برای اجرای چندین shell_exec در یک زمان وجود داره؟

باتشکر./

Unique
یک شنبه 19 مرداد 1393, 13:34 عصر
بجای shell_exec از این روتین استفاده کن :


function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}

این صبر نمیکنه برای command تا تموم بشه ! اما اصلا vlc برای این کار ها خوب نیست وقتی میشه از ffmpeg استفاده کرد.

abolfazl-z
یک شنبه 19 مرداد 1393, 18:31 عصر
با اجازه جناب Unique

میتونین اینکار را در دو حالت انجام دهید :


shell_exec("cmd1 ; cmd2 ; ...");
shell_exec("cmd1 && cmd2 && ...");

فرق && و ; :

با گذاشتن ; در بین دستورات ، دستورات بدون هیچ گونه شرطی و بصورت مستقل جدا اجرا می شوند.
ولی با گذاشتن && در بین دستورات ، اگر دستور 1 success بود سپس بعد از آن دستور 2 ، و اگر دستور 2 success بود و بعد از آن دستور 3 و الی آخر


منابع :
http://stackoverflow.com/questions/7122742/execute-two-shell-commands-in-single-exec-php-statement
http://stackoverflow.com/questions/23149332/executing-multiple-line-shell-command-in-php

m.yazdian
سه شنبه 21 مرداد 1393, 08:50 صبح
بجای shell_exec از این روتین استفاده کن :


function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}

این صبر نمیکنه برای command تا تموم بشه ! اما اصلا vlc برای این کار ها خوب نیست وقتی میشه از ffmpeg استفاده کرد.

متاسفانه با استفاده از این روش فقط دوتا فایل را همزمان میتونم تبدیل کنم. یعنی فقط دوتا ffmpeg در یک اجرا میشه وقتی ffmpeg سوم را با دستور exec اجرا می کنم اجرا نمیشه تا یکی از اون دوتا ffmpeg که در حال کار کردن هستند رو kill کنم و بعد اون یکی ffmpeg اجرا میشه...!!!

به نظرتون مشکل از کجاست؟

m.yazdian
سه شنبه 21 مرداد 1393, 09:57 صبح
دوستان چه راهی وجود داره که من بتونم با PHP چندین دستور ffmpeg را در یک لحظه اجرا کنم؟

مثلا شما 4 تا webcam دارید میخواهید اونها رو به سمت یک RTMP Server استریم کنید. باید 4 تا FFMPEG بزنید مثلا اینجوری


exec("ffmpeg -v412 -i /dev/video0 rtmp://192.168.1.100/live/sample1");
exec("ffmpeg -v412 -i /dev/video1 rtmp://192.168.1.100/live/sample2");
exec("ffmpeg -v412 -i /dev/video2 rtmp://192.168.1.100/live/sample3");
exec("ffmpeg -v412 -i /dev/video3 rtmp://192.168.1.100/live/sample4");


دوستان لطفا راه کار بردن خیلی ممنون میشم

eshpilen
سه شنبه 21 مرداد 1393, 12:14 عصر
فقط دوتا پراسس؟
تست کن ببین فقط درمورد ffmpeg اینطوره یا کلا نمیتونی همزمان بیش از 2 پراسس از هر برنامه ای رو داشته باشی.
ممکنه تنظیمات هاست تعداد پراسسهای همزمان شما رو محدود کرده باشه.
از هاست اشتراکی استفاده میکنید؟

Unique
سه شنبه 21 مرداد 1393, 15:04 عصر
من که دلیلی نمیبینم که فقط دو تا انجام بشه ! اگه مشکلی بود نباید دومی هم اجازه پیدا میکرد ! متاسفانه چون تجربه اجرایی ندارم بیش از این نمیتونم کمک کنم.