2012-04-26 37 views
2

我用下面的网站,以帮助我在PHP后台进程 - http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/PHP后台进程不工作

我的代码基本上是除了我shell_exec方法同样是这样的 -
nohup php -f /my/path/to/import_products.php 2 > /dev/null 2> /dev/null & echo $!

它正在执行的PHP脚本运行良好,产品已导入,但是当我将sleep(10)添加到import_products.php时,while(is_process_running($ps))仅循环一次并退出。

似乎正在执行的命令shell_exec正在立即完成,而不是等待10秒(来自sleep(10))。

任何想法,为什么这可能是?

编辑
我想我的问题真的是“为什么不等待PHP脚本退出的进程将停止上显示的是PS过吗?” - 当PHP脚本正在睡眠10秒ps $pid应该显示该过程至少10秒?

+0

您是否启用了错误报告?尝试检查错误日志以获取更多信息。 – 2012-04-26 09:08:03

+0

'sleep'依赖于'is_process_running',它在大部分时间都处于'while循环中,除非它是一个很长的进程'..它只会运行一次然后终止 – Baba 2012-04-26 09:10:54

+0

请问为什么您修改了给定的代码链接?你不希望它做什么? – DaveRandom 2012-04-26 09:11:47

回答

1

请相应修改你的代码。

  1. 在开始php标记之前,在您的php文件的顶部添加#!/usr/bin/env /usr/bin/php
  2. 更改shell_exec("nohup /usr/bin/php /my/path/to/import_products.php > /dev/null &")

请注意我的php路径为/ usr/bin中/ PHP和我使用Ubuntu os.So如果你的PHP可执行文件的路径是不同的,那么相应地替换此。

+0

它看起来像你的'shell_exec'没有返回PID。如果我将'echo $!'添加到该命令的结尾,但我回到了原来的状态,因为它不会等待PHP脚本完成。 – Sam 2012-04-26 09:36:25