長すぎます。
$ 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.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 &