2010-03-29 145 views
1

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

所以我呼吁:

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页面。

回答

1

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

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

0

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

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

3

一对夫妇建议:

  1. 尝试把完整路径SSH(/usr/bin/ssh或无论它的安装,而不是仅仅ssh

  2. 确保用户阿帕奇/ PHP下运行设置无需询问密码就能正确地将ssh发送到其他机器。显然,如果SSH要求输入密码,那里没有人输入密码,所以它看起来什么都没做。

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

  4. 尝试一些不同的标志为SSH。像-n这是专门为在后台运行ssh命令而设计的。

+0

+1所有伟大的建议。 – 2010-03-29 18:51:14