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スクリプトを実行したときに値を実行して返すことができることです。

ただし、Webページで実行しようとすると何も返されません。

私はlocalhost / api3.phpにアクセスしてWebページを介して読み込むと実行されないと思います。誰でも助けることができますか?その理由は何ですか?追加しました

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

関連情報