這兩天用 PHP 做了一個(gè)后臺(tái),想調(diào)用 shell 命令來實(shí)現(xiàn)自動(dòng)代碼打包,遇到了 shell 命令執(zhí)行沒反應(yīng)的問題。
后來在命令行下用 php 來執(zhí)行,居然能正常工作,故而判斷是權(quán)限配置的問題。
一、查看當(dāng)前是哪個(gè)用戶在運(yùn)行 PHP
兩種辦法:
1、PHP 代碼
<pre>
<?php
echo shell_exec("id -a");
</pre>
2、shell 命令 lsof -:80
<pre>
[root@localhost dev_host]# lsof -i:80
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 27556 root 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
nginx 27558 apache 6u IPv4 1135157 0t0 TCP *:http (LISTEN)
</pre>
這倆的結(jié)果都能看出來當(dāng)前用戶是 apache
二、添加用戶 apache,并賦予 sudo 權(quán)限
vi /etc/sudoers,添加
<pre>root ALL=(ALL) ALL
apache ALL=(ALL) NOPASSWD:ALL</pre>
并將如下這行注釋掉,表示不需要控制終端:
<pre># Defaults requiretty</pre>
增加行 Defaults visiblepw,否則會(huì)出現(xiàn) sudo: no tty present and no askpass program specified
最后使用 :w! 保存
三、執(zhí)行命令的時(shí)候,一定要在命令最前面加上 sudo
不然會(huì)遇到調(diào)用命令,返回錯(cuò)誤碼 127 的情況。正確的姿勢是:
<pre>sudo sh testshell</pre>
參考資料: