Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在php中运行bash脚本_Php_Bash_Scripting_Shell Exec - Fatal编程技术网

在php中运行bash脚本

在php中运行bash脚本,php,bash,scripting,shell-exec,Php,Bash,Scripting,Shell Exec,我有两台电脑。在第一台计算机上,我让apache运行我所有的web代码。在第二台计算机上,我用检索脚本存储了大量数据(脚本通常需要数小时才能运行)。我基本上是在创建一个web UI来访问这些数据,而没有任何时间延迟 因此,我呼吁: exec(“bash initial.bash”) 这是我的Apache文件夹中的驱动程序脚本。它调用另一台计算机上的脚本。 打电话: ssh其他机器温度bash& 此脚本调用第二台计算机上的数据检索脚本 如果我在终端中调用initial.bash,一切都会顺利成功,

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

因此,我呼吁:

exec(“bash initial.bash”)

这是我的Apache文件夹中的驱动程序脚本。它调用另一台计算机上的脚本。 打电话:
ssh其他机器温度bash&

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

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


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

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


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

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

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

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

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

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

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

一些建议:

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

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

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

  • 尝试使用一些不同的标志来ssh。类似于
    -n
    ,它是专门为在后台通过ssh运行命令而设计的

  • 有几点建议:

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

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

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

  • 尝试使用一些不同的标志来ssh。类似于
    -n
    ,它是专门为在后台通过ssh运行命令而设计的