PHP shell_exec不执行

时间:2018-06-28 22:55:56

标签: php shell elasticsearch exec shell-exec

我很头疼,正在使我的Web服务器上的某些按钮在需要时停止/启动/重新启动我的ElasticSearch服务。 我在互联网上查找了很多东西,却没有发现类似我的问题的东西。

这是我要执行的shell:

if(isset($_POST["name"])){

$name = $_POST["name"];

//the script to check the service status of ElasticSearch (which works fine btw)
$status = shell_exec("systemctl status elasticsearch");

//I use a simple regex to get from the above script's output if the status of the service is "running" or not
preg_match("/\bactive\s+\K\S+/", $status, $result);

switch ($name){
    case "start":
        $shell = shell_exec("sh ../../../../scripts/startElasticsearch.sh");
        echo $shell;
        if($result[0] == "(running)"){
            echo "Node started successfully.";
        }
        break;
    case "restart":
        $shell = shell_exec("sh ../../../../scripts/restartElasticsearch.sh");
        echo $shell;
        if($result[0] == "(running)"){
            echo "Node restarted successfully.";
        }
        break;
    case "stop":
        $shell = shell_exec("sh ../../../../scripts/stopElasticsearch.sh");
        echo $shell;
        if($result[0] !== "(running)"){
            echo "Node stopped successfully.";
        }
        break;
}
}

这是我编写的3个.sh文件的shell脚本:

#!/bin/bash
systemctl start elasticsearch

#!/bin/bash
systemctl restart elasticsearch

#!/bin/bash
systemctl stop elasticsearch

我已经更改了执行shell的所有权限(例如chmod 755等)。

现在这是一个令人毛骨悚然的部分:当我调试shell的执行时,我尝试echo一个“ Hello World”,因此我可以确定我的php脚本运行正常(由于{ {1}}不输出任何内容) 而且一切正常。单击按钮时,我从烤面包片上得到了“ Hello World”答案。但是上面3个脚本中没有其他内容(我当时正在通过Kibana监视服务状态)。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过进一步的挖掘,我发现this article回答了我的问题。在脚本上使用sh只是一个简单的错误,从而导致了问题。谢谢大家的时间!