2014-10-01 41 views
1

在Linux的Apache服务器(Ubuntu的14.04 LTS,与APM 2.4.7 mpm_prefork和mod_php)我有PHP脚本,需要很长的时间。这些被apache杀死。阿帕奇杀死很长时间的运行过程

我们必须调整的PHP环境(的max_execution_time,参数或者set_time_limit ...)

我们没有在日志中任何痕迹(系统日志,Apache访问/错误日志)

我们已经追查Apache进程与strace的:

2172 is the script process 
1939 is the apache main process 
.... 

2172 14:53:01 +++ killed by SIGKILL +++ 
1939 14:53:01 --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_KILLED, si_pid=2172, si_status=SIGKILL, si_utime=3067, si_stime=38} --- 
+0

我建议长时间运行的PHP脚本应该在后台(而不是在Web服务器)上运行,并在数据库中,以“国家应该“留线索”进步。这可以在网页浏览器中以“用户友好”的方式报告。 – 2014-10-01 15:45:21

回答

1

尝试设置ini_set('max_execution_time', -1); 或运行该脚本的根,那么Apache将不会杀他

+0

我们尝试了max_execution_time -1,但结果相同。 并在bash上以root身份运行脚本...脚本未被杀死。 – Inexine 2014-10-01 15:29:08

+0

你要多久执行此代码? – Daredzik 2014-10-01 15:35:46

+0

20-30分钟取决于处理 Apache随机杀死脚本。 2分钟,10分钟,15分钟... 少数情况下脚本不会被杀死 – Inexine 2014-10-01 16:01:37

0

另一种可能性我Apache2正在杀死这个进程,因为它在一段时间内没有发回任何东西。这通常发生在共享主机上。如果您使用输出缓冲,请关闭该功能。然后每隔一段时间打印一次,立即使用flush()将信息发回给Apache。

例如;在你最长的循环中,您可以执行以下操作:

$time = time(); 
while($looping) { 
    ... Code here ... 
    if(time() > $time) { 
    echo '.'; 
    flush(); 
    //ob_flush();//If you're using output buffering (often on by default) 
    $time = time(); 
    } 
} 
+0

我们与此尝试同时: 回声 “
”; echo memory_get_usage(); flush(); ob_flush(); $ cpt = 0; – Inexine 2014-10-01 15:42:25

+0

这应该工作。还可以尝试使用'set_time_limit(30)',这会增加脚本运行30秒的时间 – Nathan 2014-10-01 16:13:11

+0

我尝试,结果相同。 – Inexine 2014-10-01 16:38:24