在php中运行bash脚本

时间:2010-03-29 18:31:25

标签: php bash scripting shell-exec

我有两台电脑。在第一台计算机上,我运行了所有网络代码的apache。在第二台计算机上,我使用检索脚本存储了大量数据(脚本通常需要数小时才能运行)。我本质上是创建一个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页面。

3 个答案:

答案 0 :(得分:3)

一些建议:

  1. 尝试将完整路径设置为ssh(/usr/bin/ssh或安装在何处而不仅仅是ssh

  2. 确保正在运行的用户apache / PHP正确设置为ssh到othermachine而不需要输入密码。显然,如果SSH要求输入密码,那么没有人可以输入密码,因此它似乎没有做任何事情。

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

  4. 尝试使用ssh的不同标志。与-n类似,专门用于在后台运行ssh命令。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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