Linux exec () блокирует живой, но не локальный

У меня есть Raspberry Pi, который я пытаюсь показать видео с помощью элементов управления в веб-приложении. Я использую omxplayer описанным способом Вот. Мой проблемный файл PHP содержит только эту строку (изменена для тестирования):

exec("/home/pi/master/playmovie.sh test.mp4");

ссылаясь на файл /home/pi/master/playmovie.sh:

omxplayer -o hdmi /home/pi/Videos/$1 < /home/pi/master/cmd > /dev/null &
echo . > /home/pi/master/cmd

Когда я выполняю этот файл php или саму команду локально через putty, все работает нормально, но когда я пытаюсь выполнить его через Интернет, он блокируется, и фильм никогда не запускается.

Важный:

  • playmovie.sh имеет права на выполнение
  • master / cmd имеет 777 разрешений
  • запись в master / cmd и выполнение других скриптов прекрасно работает как локально, так и онлайн через php
  • с php онлайн могу выполнить omxplayer -h, ls -l /home/pi/Videos/test.mp4, echo -n p > /home/pi/master/cmd таким образом, это определенно признает все это действительным.

Я чувствую, что схожу с ума, и это буквально последнее, что мне нужно сделать в этом проекте, чтобы сделать его работоспособным, помогите !!

0

Решение

Я думаю, это потому, что ваша фактическая команда exec не обрабатывает stdout, stderr и stdin. При вызове из командной строки PHP не имеет выходного буфера, но из браузера он делает.

Звучит так, как будто он получает какой-то вывод, а затем ждет завершения выполнения скрипта и, в конечном итоге, приводит к истечению времени ожидания, следовательно, он ничего не делает.

Что произойдет, если вы используете nohup?

exec("nohup /home/pi/master/playmovie.sh test.mp4 &");

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]