這兩天用 PHP 做了一個后臺,想調(diào)用 shell 命令來實現(xiàn)自動代碼打包沛励,遇到了 shell 命令執(zhí)行沒反應(yīng)的問題眉厨。
后來在命令行下用 php 來執(zhí)行,居然能正常工作笆包,故而判斷是權(quán)限配置的問題。
一拷沸、查看當(dāng)前是哪個用戶在運行 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验毡,否則會出現(xiàn) sudo: no tty present and no askpass program specified
最后使用 :w!
保存
三、執(zhí)行命令的時候帝嗡,一定要在命令最前面加上 sudo
不然會遇到調(diào)用命令晶通,返回錯誤碼 127 的情況。正確的姿勢是:
<pre>sudo sh testshell</pre>
參考資料: