【问题标题】:PHP5, Shell_exec waiting for spawned linux shell tasks to finishPHP5,Shell_exec 等待生成的 linux shell 任务完成
【发布时间】:2015-04-06 08:36:49
【问题描述】:

我正在尝试从 PHP5 启动一个 linux shell 脚本,该脚本将运行 24 小时,但我希望网页在几秒钟内返回。我虽然可以通过生成任务的脚本来解决这个问题,但它似乎不起作用。

几天来,我一直在寻找解决方案或“一枪/开火然后忘记”选项,但没有任何运气。

下面的例子说明了这个问题。

在 PHP 5 中,我进行了以下调用之一(在这一点上尝试了很多)

passthru("dummy_script.sh");

system("dummy_script.sh");

shell_exec("dummy_script.sh");

虚拟脚本如下所示:

#!/bin/sh
{
  while true                             
  do 
    sleep 1
  done
} &

我可以看到该进程已启动,但在我制作“killall dummy_script.sh”之前网页没有返回。如果我在终端中手动运行脚本,它会立即返回并产生循环。

有没有人知道在这里我可以在不让网页等待的情况下生成任务的方法?

希望大家能帮帮我,不胜感激。

【问题讨论】:

    标签: php linux multithreading shell sh


    【解决方案1】:

    回答你的问题:

    1. 您可以开始查看pcntl_fork。或者您可以查看this。基本上,您使用本机 fork 来分叉长时间运行的进程,因此您的 php 前端不必等待。
    2. 如果您喜欢冒险,可以将您的“工作”(您对这个长期运行过程的请求)放入数据库中。然后,一个 cron 作业会检查数据库是否有传入请求,并且它就是执行该进程的那个。
    3. 另一种方法是使用resque,但此时不要打扰。

    【讨论】:

    • 感谢您的快速响应。这是一个可能的解决方案,并且目前还可以解决。但我无意在等待过程完成时占用任何资源。没有等待它完成就发送命令的选项吗? (“一劳永逸”选项)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 2013-12-18
    • 1970-01-01
    • 2015-11-16
    相关资源
    最近更新 更多