Estou com dificuldades para executar scripts bash com exec () do php e queria obter algumas sugestões.
Eu adoraria ser mais flexível nessa área porque eu posso vejo muito potencial para minha pequena intranet se eu combinar o poder de uma linguagem de linha de comando. Até agora usando o bash com php tem sido problemático e eu estou querendo saber se há pode ser uma combinação melhor para tentar. Outras Recomendações bem vinda! Não tenho certeza de quais outras opções estão disponíveis.
De qualquer forma, eu pensei que poderia dizer como cheguei onde estou atualmente preso.
Ubuntu Mate executando uma configuração LAMP
Eu estava usando um pi de framboesa como meu servidor, mas recentemente atualizado para uma máquina maior. No passado Eu era capaz de usar o PHP para executar alguns scripts bash que me deu mais flexibilidade com o meu programa.
Eu uso esses scripts bash em alguns casos com o sudo direitos para fazer coisas como montar uma unidade de rede ...
Eu consegui isso antes editando meus sudoers arquivo e dando privilégios de apache (usuário = www-data) para executar apenas esses scripts particulares do bash. Os scripts do bash fez algumas coisas diferentes.
Uma tarefa que eu precisava fazer era montar uma janela compartilhamento de rede para o meu pi ubuntu.
meu arquivo PHP usado
exec ("caminho sudo / para / meu / meuscript.sh 2 > & 1");
para chamar o script bash
o script bash iniciou uma montagem usando um comando como
sudo mount -t cifs -o nome de usuário = XXXXX, senha = XXXXX WindowsMountAddress UbuntuSystemMountPoint
Tudo funcionou de forma consistente ... e outros scripts e comandos bem executado também.
Ubuntu 18.04 executando o LAMP
Desde a migração do meu sistema, não tenho conseguido montar meu compartilhamento de rede usando a abordagem de script bash descrita acima.
Eu posso montar o compartilhamento com a linha de comando bem. Se eu executar o arquivo php que chama meu script, que por sua vez monta a unidade ... tudo bem também ... Tudo está bem na linha de comando.
Aqui está a coisa estranha que eu não entendo ...
Antes eu estava verificando o que foi montado usando o comando ....
mount -t cifs
Eu enganchei isso no meu mesmo pipeline {PHP exec} chama {bash script} é executado {commandline}
Se houvesse uma chamada para minha função para montar a unidade de rede do Windows, verifique se foi montado primeiro.
O mais estranho é que isso mostra entradas mesmo quando a montagem não está funcionando. Se eu rodar a página do PHP para montar ... ele continuará adicionando entradas aqui, mas ... na verdade, a pasta não está montada corretamente. Então, usando páginas da Web e apache adiciona entradas e também não retorna nenhum erro. É como o apache está montando a pasta, mas os arquivos simplesmente não estão lá .... Se eu atualizar uma página e tem três entradas no meu relatório ... e, em seguida, vá para a linha de comando para verificar o relatório novamente ...
Executando o mesmo comando (mount -t cifs) na linha de comando real mostra nada .... na linha de comando ... apenas as montagens "reais" são exibidas. Apenas montagens emitidas via linha de comando ...
É quase como se o apache tivesse uma visão e quando eu uso o root na linha de comando tem outra. Mas o seguinte comando sugere que o apache não está sendo executado em um chroot:
ls -l /proc/2304/root
lrwxrwxrwx 1 root root 0 Oct 5 19:10 /proc/2304/root -> /
Qualquer ideia sobre isso ou alternativas para este problema seria apreciada.
Incidentalmente, usei esses scripts porque estou em uma rede onde os IPs dinâmicos são atribuídos então eu estava usando alguns scripts para primeiro verificar o IP do meu Windows compartilhe e monte a pasta quando necessário.
Como eu disse ... Eu realmente quero mais flexibilidade ... Eu estaria disposto a mergulhar em outra linguagem de programação se ela se encaixasse de alguma forma no php e eu pudesse ter acesso à linha de comando do sudo com menos problemas. Sugestões?