从PHP在后台运行shell脚本

时间:2016-03-24 20:09:48

标签: php linux bash shell

情景:

  1. 我有一个PHP脚本(通过网络访问),它生成一个shell脚本,即使在请求结束后也需要继续运行。
  2. 我需要将输出发送到磁盘上的文件(即" ./ script.sh> run.log")
  3. 我尝试的每一种方法似乎都会导致PHP仍在等待shell脚本完成执行。我试过的方法:

    1. nohup ./script.sh > run.log &
    2. nohup ./script.sh > run.log 2>&1
    3. nohup ./script.sh > run.log 2>&1 &
    4. ./script.sh &
    5. ./script.sh > run.log 2>&1
    6. ./script.sh > run.log &
    7. 我认为我可能会遗漏一些非常明显的事情。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

我认为您可以通过使用脚本启动screen实例来实现此目的:

screen -d -m 'bash ./script.sh > run.log'

答案 1 :(得分:1)

你试过shell_exec吗?

您可能对这篇文章感兴趣:Is there a way to use shell_exec without waiting for the command to complete?

答案 2 :(得分:1)

你的5号方法已接近但你需要将它与6这样的结合起来

shell_exec("/script.sh > run.log 2>&1 &");

或像这样重定向到/ dev / null

shell_exec("/script.sh > /dev/null 2>/dev/null &")

看来PHP开发服务器无法正确分叉命令。 使用像Apache或NGinx这样的真实Web服务器可以解决问题。