我正在開發一個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