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 选项强制 tty 分配,即使 ssh 没有本地 tty。

来源: man ssh

相关内容