dongmaopan5738
dongmaopan5738
2018-04-20 12:21

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

I want to restart mysql service on click of the button using php.

I have developed application using php till now I tried below things and facing the problem

<?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>

What I am getting is:

string(55) "Restarting mysql (via systemctl): mysql.service failed!" 

rest.sh:

#!/bin/bash
/etc/init.d/mysql restart

while executing above file from the commnad line it asks for the password.

any help will be appreciated.

Thanks

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

3条回答

  • doujiao6872888 doujiao6872888 3年前

    Granting the user that runs PHP/web server permissions to restart any service is generally a bed idea from security perspective not even taking about permission to manage all system daemons or full sudo.


    Once you have been warned, you have to make sure the user that is running the PHP script has the permission to run the restart command. As already stated, the issue has likely little to do with PHP. There are several ways from you to proceed here:

    • You can grant the PHP user the sudo permission to run the desired command and nothing else (how to do that is covered elsewhere) and invoke the command directly from PHP: sudo systemctl restart mysql.

    • Keep the rst.sh file, get it owned by root, writeable by noone else but root and set SUID bit on that file. This way you can invoke the script without sudo but the script will be run as root thanks to the SUID bit.

    #1 feels safer and simpler.

    点赞 评论 复制链接分享
  • doutonghang2761 doutonghang2761 3年前

    In php try using this command

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

    or push this command to rst.sh

    be ensure have chmod +x on file rst.sh

    点赞 评论 复制链接分享
  • douran9707 douran9707 3年前

    You could also try with 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>
    

    Though your problem is coming from the script you are running (rst.sh). Check the commands in script, you probably need to a systemctl call with sudo.

    点赞 评论 复制链接分享

为你推荐