【发布时间】:2014-08-04 12:59:30
【问题描述】:
我正在开发一个 PHP-FPM 驱动的模块,在该模块中上传视频,然后在后台使用 ffmpeg 将它们转码为几种 HTML5 格式。这个 PHP-FPM 脚本在特定的非 root UID 下运行,称为 tv25。
有一种变体,我通过流媒体服务器 (Wowza) 录制网络摄像头流,它在根 UID 下运行,并通过 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 运行命令,它就像一个魅力,因为这个 UID 允许运行 ps 命令。
问题似乎与shell_exec returns empty string 中的问题相似,但那里列出的解决方案对我不起作用。
我的 /etc/sudoers 行是这样的:
tv25 ALL = (root) NOPASSWD: /bin/ps
实在想不通是怎么回事……
【问题讨论】: