Выполнение сценария оболочки в фоновом режиме с помощью php - PullRequest
4 голосов
/ 05 октября 2011

Мне нужно выполнить скрипт оболочки. Подвох в том, что я хочу сделать это

$Command = "nohup cvlc input --sout '#transcode {vcodec=h264,acodec=mp3,samplerate=44100}:std{access=http,mux=ffmpeg{mux=flv},dst=0.0.0.0:8083/".output"}' &";
$str = shell_exec($Command);

Я не хочу ждать, пока команда не закончится, я хочу, чтобы она работала в фоновом режиме. Я не хочу, чтобы другой поток php истекал, команда может занять до 3 часов.

Ответы [ 2 ]

9 голосов
/ 24 мая 2012

Вы можете попробовать запустить команду в фоновом режиме, используя такую ​​функцию:

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

Это заставляет вашу команду оболочки работать, но поток php продолжается.

8 голосов
/ 05 октября 2011
$str = shell_exec($Command.' 2>&1 > out.log');

Вам необходимо перенаправить вывод команды.

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

http://php.net/manual/en/function.exec.php

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