No manual do PHP para shell_exec
, ele mostra que a função retorna a saída como uma string. Se você espera que o resultado do programa seja iniciado, é necessário capturar isso da seguinte forma:
$execQuery = "echo -n test_command";
$output = shell_exec($execQuery);
echo $output;
Sua pergunta não aparece tentando capturar dados. Se você também conectar stdout e stderr ao executar o comando, deverá ter uma idéia melhor do que está acontecendo. Para usar seu exemplo:
$output = shell_exec("/usr/bin/oneuser create test10 test10 2>&1");
var_dump($output);
Isso deve ajudá-lo a ver o que está acontecendo. Como Shadur sugere , Parece provável que esses programas esperem um terminal interativo que possa inserir senhas para ser executado. Mesmo se não precisar de entrada, eles podem esperar camadas interativas. E ele está certo que su
não é legal nesse contexto. Existe, no entanto, uma ferramenta correta para o trabalho.
Você pode configurar sudo
para que seu usuário http possa executar seu programa como nome de usuário sem senha, mas NÃO seja capaz de executar qualquer outra coisa executando visudo
ou o que você usar para editar seu arquivo sudoers e adicionando essa linha :
http ALL=(username) /usr/bin/oneadmin
Então, em php, seu comando seria algo como isto:
$execQuery = "sudo -u username /usr/bin/oneadmin postgres -c '/usr/bin/oneuser create test10 test10'";
$out = shell_exec ("$execQuery 2>&1");
echo $out