Centos - executando um script bash do PHP

0

Eu tenho 3 scripts (eu removi a função help_page do script networkstats.sh quando colei aqui para economizar espaço):

api3.php

<?php

output = shell_exec('/bin/bash /usr/share/nginx/status/getnetworkstatsin.sh');
echo $output;

?>

getnetworkstatsin.sh

#!/bin/bash
ssh -i /tmp/id_rsa1 root@centos7clone bash -s -- -I < ./networkstats.sh

networkstats.sh

#!/bin/bash

interface=enp0s3

read -r inbytesold outbytesold < <(awk -v dev="^$interface:" '$1 ~ dev {
              sub(/[^:]*:/,""); print $1, $9; exit }' /proc/net/dev)

sleep 1

read -r inbytesnew outbytesnew < <(awk -v dev="^$interface:" '$1 ~ dev {
              sub(/[^:]*:/,""); print $1, $9; exit }' /proc/net/dev)

kilobitsin=$(( ( ( inbytesnew - inbytesold ) * 8 ) / 1024 ))

kilobitsout=$(( ( ( outbytesnew - outbytesold ) * 8 ) / 1024 ))

show_outgoing() {
echo $kilobitsout
}

show_all() {
echo "kilobits in: $kilobitsin"
echo "kilobits out: $kilobitsout"
}

if [[ $# -eq 0 ]];
then
        help_page
        exit 1
fi

for arg in "$@"
 do
        case $arg in
                -h|--help)
                help_page
                ;;

                -I)
                show_incoming
                ;;

                -O)
                show_outgoing
                ;;

                -A|--all)
                show_all
                ;;
        esac
 done

O problema que tenho é que quando eu executo o script api3.php do console, ele é capaz de executar e retornar um valor.

No entanto, quando tento executar uma página da Web, ela não retorna nada.

Acredito que nem está sendo executado quando eu o carrego pela página navegando para localhost / api3.php. Alguém pode ajudar, qual é a razão por trás disso? Eu adicionei

nginx ALL=NOPASSWD: /usr/share/nginx/status/getnetworkstatsin.sh

Para minha seção visudo, tentei alterar as permissões de todos os arquivos envolvidos para o 777 (temporalmente) sem sucesso.

Todos esses scripts estão localizados em / usr / share / nginx / status ao qual o nginx tem acesso.

    
por W Khan 08.08.2014 / 09:44

1 resposta

1

Você não tem um console ativo ao invocar o script de php . Adicione a opção -tt ao seu comando ssh .

-t Force pseudo-tty allocation. This can be used to execute arbitrary screen-based programs on a remote machine, which can be very useful, e.g. when implementing menu services. Multiple -t options force tty allocation, even if ssh has no local tty.

Fonte: man ssh

    
por 21.08.2014 / 02:36