【问题标题】:execute a bash script from php to execute jar从 php 执行 bash 脚本以执行 jar
【发布时间】:2015-08-22 17:40:02
【问题描述】:

我正在尝试从我的服务器上的 PHP 运行脚本。

<?php exec("sh /var/www/scripts/script.sh", $output); ?>

我的脚本是:

#!/bin/bash
sh Stop.sh
nohup java -jar RestApiRandonSender.jar&      # You send it in background
MyPID=$!                        # You sign it's PID
echo $MyPID                     # You print to terminal
echo "kill -9 $MyPID" > Stop.sh  
echo "rm Stop.sh" >> Stop.sh

我的文件夹结构是:

/var/www/
/html/restart.php
/scripts/script.sh

所有组和用户都是root

当我从 Chrome (localhost/restart.php) 访问 PHP 页面时,没有任何反应。

但是当我在文件夹中运行脚本时

sudo php ../html/restart.php

脚本重新启动 jar 文件并创建 Stop.sh,但直到我按下 Ctrl+c 或 Ctrl+z 后脚本才会结束。

我是 Linux 新手。我希望我提供了所有需要的细节..

编辑: 我将路径更改为 script.sh 中的完整文件路径 现在它几乎可以工作了。

这个过程仍然没有结束。 chrome的网页正在等待响应,jar文件的进程id与我在Stop.sh中得到的进程id完全不同

$ ps -ef | grep java
apache   10086     1 76 11:23 ?        00:05:00 java -jar /var/www/scripts/RestApiRandonSender.jar 

【问题讨论】:

    标签: php linux bash shell jar


    【解决方案1】:

    您当前的问题可能是基于根本不处理目录:rm,像大多数 Unix 风格的命令一样,如果没有指定,则从当前目录运行。当您通过调用 ../html/restart.php 从另一个目录运行时,它将尝试在当前目录中运行 Stop.sh 脚本,失败(可能默默地 - 您应该修复它),然后继续运行新的 Java 服务器,这我怀疑如果你检查 its 日志(你这样做了吗?)将被永久卡住,试图绑定到 TCP 端口,因为其他进程仍然存在,所以它不能。

    在您的 Bash 脚本中,您需要处理在哪里可以找到/创建 Stop 脚本。你应该:

    1. 将目录硬编码(例如,将/var/run/blah...) 写入脚本中的Stop.sh 脚本,
    2. 或使其相对于脚本的导演 - 您可以使用 dirname $0 在 Bash 中找到它。
    3. 或者,不要每次都重写脚本,直接重写进程的PID即可。无论如何,这实际上是大多数服务经理所做的。在您的情况下,您只需将MyPID 写入文件,然后执行:

    结合最后两个元素,你可以尝试(未经测试):

    #!/bin/bash
    PIDFILE=$(dirname $0)/PID           # Read the current PID, if any
    pid=$(cat $PIDFILE) && kill -9 pid  # Kill it off if it's there
    nohup java -jar RestApiRandonSender.jar &
    pid=$!
    echo $pid > $PIDFILE                # Write the new PID to the file
    

    您需要考虑的其他设置问题:

    • 为了安全起见,切勿root 运行您的网络进程(如果可以避免的话)。至少为您需要做的最有限的一组事情设置sudo 权限。
    • 并发(当几个人同时运行这个脚本(URL)时会发生什么?)。不处理这个问题你可能会侥幸逃脱,因为这通常是个难题。
    • 重新启动服务器本身时会发生什么。从长远来看,我建议您考虑从 Java 服务器创建 Linux 服务 - 请参阅 Linux: process into a service 以获取一些示例。这也涉及上一点...

    【讨论】:

    • 谢谢!添加完整路径后它仍然无法正常工作。还有问题我用新的细节编辑了帖子
    • @Daniel 这并不是导致问题的真正路径。查看我更新的答案和示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多