Centos - PHP에서 bash 스크립트 실행

Centos - PHP에서 bash 스크립트 실행

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

관련 정보