在Linux中使用PHP / Shell脚本从浏览器重新启动MySql Server

时间:2018-04-20 12:21:23

标签: php mysql shell ubuntu centos

我想使用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行执行上述文件时,它会要求输入密码。

任何帮助将不胜感激。

由于

3 个答案:

答案 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