如何使用PHP重启linux系统(Debian)

时间:2013-10-01 06:29:17

标签: php linux

我想用PHP执行linux命令

myfile.php:

<?php
$output = shell_exec('ls');
echo "<pre>$output</pre>";
?>

有效!

但是当我将linux命令从ls更改为reboot时,没有任何反应!

所以我试图找到另一个解决方案:

mycode.html:

<button type="button" onclick="/var/www/myscript.sh">Click Me!</button>

myscript.sh:

sudo reboot

它也不起作用!

愿任何人帮我解决这个问题。

感谢您的帮助。

3 个答案:

答案 0 :(得分:6)

默认情况下,必须以root身份执行reboot命令。如果您的Web服务器在root帐户下运行,您就可以这样做,但这是非常不寻常的主张。

通常,Web服务器在有限的帐户下运行,这不能做太多,当然也不能执行重启。如果确实想要这样做,那么必须非常小心。提供此功能的标准方法是创建特殊的包装器(最有可能是suid),它在允许在提升的权限下运行之前检查许多条件。

另一个解决方案是让PHP创建标志文件或插入特殊数据库条目,这将由另一个以root身份运行的服务进行检查,注意到该标志并最终执行reboot。

答案 1 :(得分:5)

正如@mvp所说,你不能以非root用户身份执行reboot。

执行此操作的一种简单方法是使用cron作业。

你的myscript.sh将是:

#!/bin/bash
touch /tmp/reboot.now

然后创建一个cron作业,检查该文件是否存在:

#!/bin/bash
if [ -f /tmp/reboot.now ]; then
  rm -f /tmp/reboot.now
  /sbin/shutdown -r now 
fi

然后将服务器配置为每分钟执行此脚本

* * * * * /usr/local/sbin/reboot.sh

当然,别忘了给文件赋予执行权限。

希望有所帮助

已编辑:当然,您的myscript.sh可以是带有fopenfclose的php而不是

答案 2 :(得分:2)

除了Sal00m的回答

ROOT crontab

* * * * * /usr/local/sbin/checkreboot.sh

checkreboot.sh

#!/bin/bash
if [ -f /var/www/html/reboot.server ]; then
  rm -f /var/www/html/reboot.server
  /sbin/shutdown -r now 
fi

reboot.php

<?php
$filehandler = fopen("/var/www/html/reboot.server",'w');
fwrite($filehandler,"Reboot now\n");
fclose($filehandler);
?>

来自http://www.linuxquestions.org/questions/linux-newbie-8/shutdown-and-reboot-linux-system-via-php-script-713379/#post3486126