Выполнить команду из PHP-скрипта: sh:1:screen: not found

У меня проблема со сценарием, запускающим сеанс экрана.

<?php  exec("screen -m -d ffmpeg2theora -v 3 /path/to/video.mp4");  ?>

и увидеть это в журналах:

Wed Oct 17 16:17:39 2012] [error] [client 83.5.x.x] sh: 1: screen: not found, referer: http://xxxxxx.xx

Он перестал работать с некоторыми обновлениями (apache/php/suphp?), до этого работал как шарм Любая идея, что случилось, как настроить suPhp/Apache?


person r4ven    schedule 17.10.2012    source источник
comment
Что произойдет, если вы запустите ту же команду из командной строки?   -  person afuzzyllama    schedule 17.10.2012
comment
Похоже, ваши переменные пути не установлены. Поэтому вам нужно запустить which screen, который даст вам полный путь к исполняемому файлу. Что-то похожее на /usr/bin/screen   -  person james_t    schedule 17.10.2012
comment
@afuzzyllama при запуске скрипта из сеанса bash (php5-cli -f file.php) и преобразовании фильма   -  person r4ven    schedule 17.10.2012
comment
Я думаю, у @james_t есть ответ на вашу проблему   -  person afuzzyllama    schedule 17.10.2012
comment
Почему вы все равно хотите использовать screen для этого?   -  person Explosion Pills    schedule 17.10.2012
comment
@Explosion Pills Я не хочу приостанавливать выполнение скрипта до тех пор, пока не будет выполнено преобразование. когда видеофайл большой, php выдает ошибку времени выполнения, но если у вас есть лучшая идея, чтобы решить эту проблему, я слушаю   -  person r4ven    schedule 17.10.2012


Ответы (2)


Если вы хотите, чтобы PHP запускал длительную команду в фоновом режиме, почему бы не попробовать следующее:

<?php pclose(popen("/usr/bin/nohup /path/to/ffmpeg2theora -v 3 /path/to/video.mp4 >/tmp/result 2>&1", "r")); ?>

Всегда разумно использовать явные пути к командам в подобных ситуациях.

person Brian Showalter    schedule 17.10.2012

Вместо этого просто выполните:

exec("ffmpeg2theora -v 3 /path/to/video.mp4 &");
person Explosion Pills    schedule 17.10.2012