我正试图从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"之前,网页不会返回。如果我在终端中手动运行脚本,它会立即返回并产生循环。
有人知道在这里我可以在不让网页等待的情况下生成任务的方法吗?
希望你们能帮我,我将不胜感激。
回答您的问题:
- 您可以开始查看pcntl_fork。或者你可以检查一下。基本上,您使用本机fork来派生长时间运行的进程,这样您的php前端就不必等待了
- 如果你有冒险精神,你可以把你的"工作"(你对这个长时间运行的过程的请求)放在DB中。然后,一个cron作业检查DB中是否有传入请求,它就是执行该过程的那个作业
- 另一种方法是使用resque,但在这一点上不要麻烦