【问题标题】:running bash scripts in php在 php 中运行 bash 脚本
【发布时间】:2011-02-02 04:15:01
【问题描述】:

我有两台电脑。在第一台计算机上,我运行了 apache,并运行了我所有的 Web 代码。在第二台计算机上,我使用检索脚本存储了大量数据(该脚本通常需要数小时才能运行)。我本质上是在创建一个 Web UI 来访问这些数据而没有任何时间延迟。

所以我打电话:

exec("bash initial.bash");

这是我的 Apache 文件夹中的驱动程序脚本。它调用另一台计算机上的脚本。 调用: ssh otherMachine temp.bash&

此脚本调用第二台计算机上的数据检索脚本。

如果我在终端中调用 initial.bash,一切都会顺利且成功,但是如果我在我的 PHP 文件中调用它,那么我在 initial.bash 中的所有命令都会运行,ssh otherMachine temp.bash& 除外。我把 & 放在最后,这样 temp.bash 将在后台运行,因为它确实需要几个小时才能完成。

我不确定为什么嵌套脚本在被 Apache 调用时没有运行。有没有比使用 exec 或 shell_exec 调用脚本更好的选择,最终调用另一个脚本。我不直接在第二台机器上调用脚本的原因是程序运行需要时间。 Shell_exec 在脚本完成之前不会呈现 php 页面。

【问题讨论】:

    标签: php bash scripting shell-exec


    【解决方案1】:

    几个建议:

    1. 尝试将完整路径放入 ssh(/usr/bin/ssh 或安装它的任何位置,而不仅仅是 ssh

    2. 确保运行 apache/PHP 的用户已正确设置为无需输入密码即可通过 ssh 连接到其他计算机。显然,如果 SSH 要求输入密码,那里没有人可以输入密码,所以它似乎什么也没做。

    3. 也尝试重定向输出 -- ssh othermachine temp.bash >/dev/null 2>&1 &

    4. 为 ssh 尝试一些不同的标志。比如-n,它是专门为在后台通过 ssh 运行命令而设计的。

    【讨论】:

      【解决方案2】:

      您可以使用 cron(计划)作业。 Cron 作业通过使用您的 bash 脚本定期检索数据。

      另外尝试 exec("/bin/bash /path/to/script.sh");可能php没有找到bash的路径。您必须查看 apache 日志以获取更多信息。

      【讨论】:

        【解决方案3】:

        我的猜测是SSH不喜欢用户php在下运行?你说它在终端上工作正常 - 你是否以同一个 php 用户身份登录?

        您可能还会发现某种更好的解决方案的消息队列。

        【讨论】:

          猜你喜欢
          • 2017-11-04
          • 1970-01-01
          • 1970-01-01
          • 2012-09-14
          • 2011-07-29
          • 2011-07-27
          • 2015-02-23
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多