我正在开发一个PHP-FPM驱动的模块,其中在上传视频时,使用ffmpeg将它们转换为背景中的多个HTML5格式。这个PHP-FPM脚本在特定的非根UID下运行,称为tv25。shell_exec不会返回与sudoed命令行相同的结果
有一个变种,我通过在根UID下运行的Streaming Server(Wowza)记录网络摄像头流,并通过Java编写的模块启动转换。
为了知道进程的状态我做一个GET请求,其运行以下功能的脚本:
function is_conversion_running($base_file_name) {
$command = "sudo ps aux | grep {$base_file_name} | grep -v grep | wc -l";
$lignes = shell_exec($command);
return (bool) $lignes;
}
当我通过AJAX调用此函数,它的工作原理为PHP-FPM变种(UID相同,在转换运行时返回true),但不适用于Wowza变体(每次返回false)。
奇怪的是,如果我在shell中使用非root UID运行该命令,它就像一个魅力一样工作,因为ps命令已被允许由此UID运行。
该问题与shell_exec returns empty string中的问题类似,但列出的解决方案对我无效。
我的/ etc/sudoers的线路是这样的:
tv25 ALL = (root) NOPASSWD: /bin/ps
实在无法弄清楚什么是交易...
该命令返回1.我不得不sudo ps,因为如果没有,以root身份启动的进程不会出现。 – jpicaude