簡體   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