2015-02-06 74 views
0

我想从PHP5启动一个linux shell脚本,它将运行24小时,但我希望网页在几秒内返回。我虽然可以通过使任务的脚本产生来解决这个问题,但它似乎并不奏效。PHP5,Shell_exec等待衍生的linux shell任务完成

我一直在寻找一个解决方案或“一枪/火,忘了”选项几天没有任何运气。

以下示例显示了该问题。

在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'之前网页不会返回。如果我在终端中手动运行脚本,它会立即返回并产生循环。

有没有人知道在这里我可以产生的任务,而不会让网页等待它?

希望你们能帮助我,这将是最感激。

回答

0

要回答你的问题:

  1. 你可以开始寻找pcntl_fork。或者你可以检查this。基本上,你正在使用本地fork来分离长时间运行的进程,所以你的php前端不必等待。
  2. 如果你觉得冒险,你可以把你的“工作”(你对这个长时间运行的过程的请求)放在一个数据库中。然后cron作业检查数据库是否有传入请求,并且是执行该过程的那个。
  3. 另一种方法是使用resque,但不要在这一点上打扰。
+0

感谢您的快速回复。这是一个可能的解决方案,现在可以解决。但是,我并不打算在等待过程完成时收集任何资源。没有等待它完成的发送命令的选项? ('消防和忘记'选项) – 2015-02-06 13:52:45