長すぎます。

長すぎます。

長すぎます。

$ 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を起動するためのWebサーバー-slave -input file=/srv/mplayer.fifo。 (その後、mplayerはそのファイルのコマンドを読み込み、実行します。)次の曲に移動するには、Webサーバースクリプトの1つが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.fifolsof出力は生成されません。

$ 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 &

関連情報