我使用任务后台处理程序来排队了一些视频编码任务(见:http://manpages.ubuntu.com/manpages/artful/en/man1/tsp.1.html和http://vicerveza.homeunix.net/~viric/soft/ts /)
为了选择特定队列(而不是默认的每用户队列),二进制文件要求您设置指向套接字的环境变量.就我而言:TS_SOCKET=/tmp/reencode.socket
.然后运行tsp
显示该特定队列的状态.
此命令在终端中工作,与任何用户一样: export TS_SOCKET=/tmp/reencode.socket ; tsp
我想创建一个显示此状态的基于Web的状态实用程序.但是,在apache2上使用php,使用exec()
相同的命令调用bash脚本不起作用.putenv('TS_SOCKET=/tmp/reencode.socket'); echo exec('tsp');
我也没试过echo `export TS_SOCKET=/tmp/reencode.socket ; tsp`
运行passthru('whoami')
在服务器上显示,它的运行作为用户www-root
,Apache服务器的用户.如果我以该用户身份登录并运行该命令,则可以正常工作.
有趣的是,如果我运行PHP的交互式shell( php -a
),我可以做任何上述PHP代码的,它工作得很好,所以它似乎是与Apache一些互动.
这一切都在Apache 2.4.27上使用PHP 7.1.11在Ubuntu 17.10上运行
原来问题不是环境变量的设置,而是访问套接字.由于apache正在运行systemd,它有一个孤立的/tmp
(参见https://unix.stackexchange.com/questions/345122/why-php-can-not-see-tmp-files)与/tmp
我所在的地方不一样插座.移动位置使一切工作正常!