너무 길어요.

너무 길어요.

너무 길어요.

$ sudo -u www-data mplayer -slave -input file=/srv/mplayer.fifo -playlist /srv/list &
$ lsof /srv/mplayer.fifo | tail +2
mplayer 21059 www-data    4u  FIFO  179,2      0t0 2359331 /srv/mplayer.fifo

$ cat /var/www/html/test
#!/usr/bin/bash
mplayer -slave -input file=/srv/mplayer.fifo -playlist /srv/list &

$ curl 'http://localhost/test' # mplayer starts playback (and keeps playing)
$ lsof /srv/mplayer.fifo
# no output!?

세부 사항

라즈베리 파이, 나는경량서버가 실행 중입니다. 시작하고 제어해야합니다플레이어프로세스. mplayer를 시작하기 위한 웹 서버 -slave -input file=/srv/mplayer.fifo. (그래서 mplayer는 해당 파일의 명령을 읽고 실행합니다.) 다음 노래로 이동하려면 웹서버 스크립트 중 하나가 pt_skip 1작성 됩니다 /srv/mplayer.fifo. 이는 mplayer가 명령줄에서 실행될 때 작동합니다. 그러나 lighttpd에서 시작하면 mplayer가 에서 시작되지 않습니다 /srv/mplayer.fifo. 이유를 모르겠습니다. 이것이 내가 한 일입니다:

설정

$ mkfifo /srv/mplayer.fifo
$ chmod o+w /srv/mplayer.fifo
$ ls -l /srv/mplayer.fifo
prw-r--rw- 1 root root 0 Aug  7 12:11 /srv/mplayer.fifo

테스트(명령줄에서 실행)

$ sudo -u www-data mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle
$ lsof /srv/mplayer.fifo
COMMAND   PID     USER   FD   TYPE DEVICE SIZE/OFF    NODE NAME
mplayer 21059 www-data    4u  FIFO  179,2      0t0 2359331 /srv/mplayer.fifo
$ ps aux | grep mplayer
root     21058  0.0  0.2   4680  2400 pts/0    S+   12:13   0:00 sudo -u www-data mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle
www-data 21059 11.6  3.1 127928 30008 pts/0    SL+  12:13   0:01 mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle

이것은 예상대로 작동합니다. 하지만 lighttpd에서 mplayer를 실행하면...

$ cat /var/www/html/play
#!/usr/bin/bash
mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle &

...mplayer가 시작됩니다, 그러나 mplayer 인스턴스는 읽히지 않습니다 /srv/mplayer.fifo. lsof출력이 생성되지 않습니다.

$ lsof /srv/mplayer.fifo

$ ps aux | grep mplayer
www-data 21177 15.3  3.1 128212 29744 ?        SL   12:30   0:01 mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle

또한 파이프에 쓰는 것이 차단되기 때문에 mplayer가 파이프에서 읽지 않는 것도 볼 수 있습니다. mplayer 로그에는 예외가 표시되지 않습니다. lighttpd에서 실행할 때 mplayer가 명명된 파이프에서 읽지 못하는 이유를 알고 계십니까?

답변1

너무 길어요.

export HOME=/var/www-data

세부 사항

명령줄에서 환경 변수를 비교했습니다.

sudo -u www-data env

lighttpd를 통해 환경 변수 설정

#!/usr/bin/bash
env

mplayer에는 설정이 필요하다는 것이 밝혀졌습니다 HOME. 이 스크립트를 사용하여 lsof /srv/mplayer.fifomplayer를 표시합니다.

#!/usr/bin/bash
export HOME=/var/www
mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle &

관련 정보