Intereting Posts

PHP-скрипт для выполнения сценария bash

У меня есть 3 сценария (я удалил функцию help_page из скрипта networkstats.sh, когда я вставил здесь, чтобы сохранить некоторое пространство):

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 к #!/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 к #!/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 

Проблема в том, что когда я запускаю скрипт api3.php с консоли, он может выполнить и вернуть значение.

Однако, когда я пытаюсь выполнить с веб-страницы, он ничего не возвращает.

Я считаю, что он даже не выполняется, когда я загружаю его через веб-страницу, перейдя на localhost / api3.php. Может кто-то помочь, в чем причина этого? я добавил

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

В моем разделе visudo я попытался сменить права доступа всех файлов к 777 (временно) без успеха.

EDIT: Я должен также упомянуть, что все эти скрипты находятся внутри / usr / share / nginx / status, к которым имеет доступ nginx.