너무 길어요.
$ 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.fifo
mplayer를 표시합니다.
#!/usr/bin/bash
export HOME=/var/www
mplayer -ao alsa -slave -input file=/srv/mplayer.fifo -playlist /srv/list -shuffle &