在linux apache服务器上(ubuntu 14.04 lts,带有mpm_prefork和mod_php的apache 2.4.7)我有PHP脚本需要很长时间。这些都是被apache杀死的。
我们调整了php设置(max_execution_time,set_time_limit ...)
我们在日志中没有任何跟踪(syslog,apache访问/错误日志)
我们用strace跟踪了apache进程:
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 :(得分:1)
尝试设置ini_set('max_execution_time', -1);
或以root身份运行此脚本,然后apache不会杀死他
答案 1 :(得分: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();
}
}