У меня есть 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.