3개의 스크립트가 있습니다(공간을 절약하기 위해 여기에 붙여넣을 때 networkstats.sh 스크립트에서 help_page 함수를 제거했습니다).
api3.php
<?php
output = shell_exec('/bin/bash /usr/share/nginx/status/getnetworkstatsin.sh');
echo $output;
?>
네트워크 통계 가져오기.sh
#!/bin/bash
ssh -i /tmp/id_rsa1 root@centos7clone bash -s -- -I < ./networkstats.sh
네트워크 통계.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
내가 겪고 있는 문제는 콘솔에서 api3.php 스크립트를 실행할 때 값을 실행하고 반환할 수 있다는 것입니다.
그러나 웹 페이지에서 실행하려고 하면 아무것도 반환되지 않습니다.
나는 localhost/api3.php로 이동하여 웹 페이지를 통해 로드할 때 실행되지 않는다고 생각합니다. 누구든지 도와줄 수 있나요? 그 이유는 무엇인가요? 나는 추가했다
nginx ALL=NOPASSWD: /usr/share/nginx/status/getnetworkstatsin.sh
내 visudo 부분에서는 관련된 모든 파일의 권한을 (일시적으로) 777로 변경하려고 시도했지만 성공하지 못했습니다.
이러한 모든 스크립트는 nginx에서 액세스할 수 있는 /usr/share/nginx/status에 있습니다.
답변1
스크립트를 호출할 때 활성 콘솔이 없습니다 php
. 명령 -tt
에 스위치를 추가합니다 ssh
.
-t는 의사 tty 할당을 강제합니다. 이는 원격 컴퓨터에서 임의의 화면 기반 프로그램을 실행하는 데 사용할 수 있으며, 이는 예를 들어 메뉴 서비스를 구현할 때 유용합니다. 여러 -t 옵션은 ssh에 로컬 tty가 없더라도 tty 할당을 강제합니다.
출처: 남자 SSH