PHP 调用sudo无效

修改配置

键入命令visudo,打开sudoers文件,编辑该文件注释掉Defaults requiretty一行,
并在root ALL=(ALL) ALL末尾追加apache ALL=(ALL) NOPASSWD: ALL然后重启PHP即可

1
2
root    ALL=(ALL)       ALL
apache ALL=(ALL) NOPASSWD: ALL

加权限

如有php调用脚本(如:shell),须得给脚本授权,如:chmod 755 restart.sh

visudo

遇到visudo:/etc/sudoers 忙,请稍后重试这种问题,直接把visudo进程kill掉就好了

1
2
3
4
5
6
[root@37wan ~]# ps aux | grep visudo
root 7405 0.0 0.0 103212 1032 pts/0 S+ 03:22 0:00 visudo
root 8390 0.0 0.0 103340 860 pts/1 S+ 03:29 0:00 grep visudo
[root@37wan ~]# kill 7405
[root@37wan ~]# ps aux | grep visudo
root 8416 0.0 0.0 103340 856 pts/1 S+ 03:29 0:00 grep visudo

代码分享

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<h3 align="middle">光明世纪</h3>
<br />
<br />
<div align="middle">
<p>服务器当前时间</p>
<?php
date_default_timezone_set("Asia/Shanghai");
echo date("Y-m-d H:i",time()); ?>
<br />
<p>回调时间需重启服务器</p>
<p>修改完时间F5刷新,看时间是否已修改</p>
<br />
<br />
<br />
<form action="" method="post">
Date: <input type="date" name="date" value="<?php echo date("Y-m-d",time()); ?>" />
<br />
Time: <input type="time" name="time" value="<?php echo date("H:i",time()); ?>"/>
<br />
<input type="submit" name="sub1" value="更改时间" />
<input type="submit" name="sub2" value="重启android测试服" />
</form>
<?php
if(isset($_POST['sub1']))
{
$date=$_POST["date"];
$time=$_POST["time"];
exec("(sudo /bin/date -s $date >/dev/null &)");
exec("(sleep 1;sudo /bin/date -s $time >/dev/null &)");
echo "时间修改 。。。【OK】";

}
if(isset($_POST['sub2']))
{
$output=shell_exec("(sudo /data/scripts/restart1.sh >/dev/null &)");

echo "测试服已经重启,请稍后登陆".$output;
}
if(isset($_POST['sub3']))
{
$output=shell_exec("(sudo /data/scripts/restart2.sh >/dev/null &)");

echo "测试服已经重启,请稍后登陆".$output;
}
# $date=$_POST["date"];
# $time=$_POST["time"];
# exec("sudo /bin/date -s $date");
## exec("sudo /bin/date -s $time",$str);
# echo var_dump($str);
# exec("sudo /data/scripts/restart.sh",$str);
?>
</div>

</body>
</html>