繁体   English   中英

无法在PHP脚本中运行Linux“awk”命令

[英]Can't run Linux “awk” command in script from PHP

我有shell脚本“test.sh”:

  #!/system/bin/sh

  PID=$(ps | grep logcat | grep root |grep -v grep | awk '{print $2}')
  echo "Using awk: $PID"


  PID=$(ps | grep logcat | grep root |grep -v grep | cut -d " " -f 7 )
  echo "Using cut: $PID"

当我从PHP运行脚本时:

exec("su -c sh /path/to/my/script/test.sh");

我得到了这个输出:

Using awk:
Using cut: 6512  

所以“cut”命令是可行的,但是当我从PHP运行脚本时,“awk”命令不起作用,但是当我从终端运行它时:

# sh test.sh

我可以得到awk和切割工作正常! 这看起来像“ps”的输出:

USER      PID   PPID  VSIZE  RSS   WCHAN       PC         NAME
root      6512  5115  3044   1108  poll_sched b6e4bb0c S logcat

我错过了什么吗?

您应该先学习如何调试

你说

所以“cut”命令是可行的,但是当我从PHP运行脚本时,“awk”命令不起作用,但是当我从终端运行它时:

我好奇怎么样?

在CLI中实际上会抛出如下所示的错误

$ php -r 'exec("su -c sh /path/to/my/script/test.sh");'
su: user /path/to/my/script/test.sh does not exist

在调试代码时,首先需要以下语法

// basic :  stdin (0) stdout (1) stderr (2)

exec('your_command 2>&1', $output, $return_status);

// to see the response from your command
// su: user /path/to/my/script/test.sh does not exist
print_r($output);  

记住

  • su为您提供root权限,但它不会更改PATH变量和当前工作目录。

  • 操作系统假设在没有用户名的情况下,用户想要更改为根会话,因此提示用户输入root密码

[akshay@localhost Desktop]$ su
Password: 
[root@localhost Desktop]# pwd
/home/akshay/Desktop
[root@localhost Desktop]# exit
exit

[akshay@localhost Desktop]$ su -
Password: 
[root@localhost ~]# pwd
/root

解:

您应该允许在没有密码提示的情况下执行脚本(不要使用su use sudo

要允许apache用户执行您的脚本和一些命令,您可以在/etc/sudoers进行如下所示的输入

# which awk => give you awk path
# same use in your script also, or else set path variable 
www-data ALL=NOPASSWD: /path/to/my/script/test.sh, /bin/cut, /usr/bin/awk

所以它变成:

// assuming your script is executable 
exec("sudo /path/to/my/script/test.sh 2>&1", $output);
print_r($output);  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM