1

我有两台电脑。在第一台计算机上,我运行了 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 页面。

4

3 回答 3

3

几个建议:

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

  2. 确保运行的用户 apache/PHP 正确设置为 ssh 到其他机器,而不要求输入密码。显然,如果 SSH 要求输入密码,没有人可以输入密码,所以它似乎什么也没做。

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

  4. 尝试一些不同的标志来 ssh。就像-n专门为在后台通过 ssh 运行命令而设计的一样。

于 2010-03-29T18:47:48.867 回答
1

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

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

于 2010-03-29T18:36:14.410 回答
0

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

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

于 2010-03-29T18:37:38.403 回答