在linux下使用php/shell脚本从浏览器重启mysql服务器

kyks70gy  于 2021-06-21  发布在  Mysql
关注(0)|答案(3)|浏览(508)

我想用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

当从命令行执行上述文件时,它要求输入密码。
任何帮助都将不胜感激。
谢谢

unftdfkk

unftdfkk1#

从安全Angular 来看,授予运行php/web服务器的用户重新启动任何服务的权限通常是一个好主意,甚至不考虑管理所有系统守护进程或完整sudo的权限。
一旦收到警告,就必须确保运行php脚本的用户有权运行restart命令。如前所述,这个问题可能与php关系不大。您可以从以下几个方面着手:
您可以授予php用户sudo权限来运行所需的命令而不运行其他命令(如何执行该操作在其他地方有介绍),并直接从php调用命令: sudo systemctl restart mysql .
保持平衡 rst.sh 文件,让它归root所有,除root之外其他人都不可写,并在该文件上设置suid位。通过这种方式,您可以在不使用sudo的情况下调用脚本,但由于suid位的存在,脚本将以root用户身份运行。

我觉得更安全更简单。

klh5stk1

klh5stk12#

在php中尝试使用以下命令

exec("/etc/init.d/mysql restart");

或将此命令推送到rst.sh
确保文件rst.sh中有chmod+x

3duebb1j

3duebb1j3#

您也可以尝试使用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。

相关问题