我想用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!"
休息.sh:
# !/bin/bash
/etc/init.d/mysql restart
当从命令行执行上述文件时,它要求输入密码。
任何帮助都将不胜感激。
谢谢
3条答案
按热度按时间unftdfkk1#
从安全Angular 来看,授予运行php/web服务器的用户重新启动任何服务的权限通常是一个好主意,甚至不考虑管理所有系统守护进程或完整sudo的权限。
一旦收到警告,就必须确保运行php脚本的用户有权运行restart命令。如前所述,这个问题可能与php关系不大。您可以从以下几个方面着手:
您可以授予php用户sudo权限来运行所需的命令而不运行其他命令(如何执行该操作在其他地方有介绍),并直接从php调用命令:
sudo systemctl restart mysql
.保持平衡
rst.sh
文件,让它归root所有,除root之外其他人都不可写,并在该文件上设置suid位。通过这种方式,您可以在不使用sudo的情况下调用脚本,但由于suid位的存在,脚本将以root用户身份运行。我觉得更安全更简单。
klh5stk12#
在php中尝试使用以下命令
或将此命令推送到rst.sh
确保文件rst.sh中有chmod+x
3duebb1j3#
您也可以尝试使用system():
尽管您的问题来自您正在运行的脚本(rst.sh)。检查脚本中的命令,您可能需要使用sudo调用systemctl。