我想使用php点击按钮重新启动mysql服务。
我已经开发了使用php的应用程序,直到现在我尝试了下面的事情并面临问题
<?php
if ($_GET['run']) {
# This code will run if ?run=true is set.
var_dump(exec("sh rst.sh"));
exit;
}
?>
<!-- This link will add ?run=true to your URL, myfilename.php?run=true -->
<a href="?run=true">Click Me!</a>
我得到的是:
string(55) "Restarting mysql (via systemctl): mysql.service failed!"
rest.sh:
#!/bin/bash
/etc/init.d/mysql restart
从commnad行执行上述文件时,它会要求输入密码。
任何帮助将不胜感激。
由于
答案 0 :(得分:1)
从安全角度来看,授予运行PHP / Web服务器权限以重新启动任何服务的用户通常都是一个基本的想法,甚至没有获得管理所有系统守护程序或完整sudo的权限。
警告后,您必须确保运行PHP脚本的用户具有运行restart命令的权限。如前所述,这个问题可能与PHP无关。您可以通过以下几种方式继续前进:
您可以向PHP用户授予运行所需命令的sudo权限,不执行任何其他操作(如何在其他地方执行此操作)并直接从PHP调用命令:sudo systemctl restart mysql
。
保留rst.sh
文件,由root拥有,除了root之外别人可写,并在该文件上设置SUID位。通过这种方式,您可以在不使用sudo的情况下调用脚本,但由于SUID位,脚本将以root身份运行。
#1感觉更安全,更简单。
答案 1 :(得分:0)
您也可以尝试使用system():
<?php
if ($_GET['run']) {
# This code will run if ?run=true is set.
var_dump(system("sh rst.sh"));
exit;
}
?>
<!-- This link will add ?run=true to your URL, myfilename.php?run=true -->
<a href="?run=true">Click Me!</a>
虽然您的问题来自您正在运行的脚本(rst.sh)。检查脚本中的命令,您可能需要使用sudo进行systemctl调用。
答案 2 :(得分:0)
在php中尝试使用此命令
exec("/etc/init.d/mysql restart");
或将此命令推送到rst.sh
确保文件rst.sh上有chmod + x