У меня есть установка системы Apache 2.2 по умолчанию с каталогом сценариев Perl CGI, настроенным следующим образом:
ScriptAlias /jarvis/ "/opt/jarvis/cgi-bin/"
Здесь нет ничего особенного, за исключением того, что обработка одного из моих сценариев занимает более 10 минут и по разным причинам в это время ничего не выводит.
Apache, похоже, имеет временные рамки в 10 минут (600 секунд) для запуска сценариев CGI - и если в этот период времени из сценария не появляется никаких выходных данных, сценарий завершается и браузеру / клиенту отправляется ответ 500.
Сообщение:
[Thu Apr 23 13:57:53 2009] [warn] [client 127.0.0.1] Timeout waiting for output from CGI script /opt/jarvis/cgi-bin/jarvis.pl
отображается в журнале в одной системе (Ubuntu, установленной с помощью apt-get), но не отображается в другой (Windows, устанавливается с помощью загрузки пакета).
Мой вопрос: есть ли в Apache 2.2 какая-либо конфигурация, которая позволила бы мне запускать скрипт дольше 10 минут, не убивая его?
редактировать
Регулярная запись сообщений журнала позволяет избежать этой ошибки - поэтому сообщение журнала, записываемое каждые несколько минут, гарантирует, что долго выполняющиеся процессы не будут убиты. В конце концов я решил свою проблему, реализовав на клиенте индикатор выполнения и заставив свой скрипт написать "." время от времени обновлять полосу на другом конце.
Спасибо, Джейми
В TimeOut Директива определяет продолжительность ожидания Apache ввода-вывода при различных обстоятельствах:
Как показано на http://cweiske.de/tagebuch/Running%20Apache%20with%20a%20dozen%20PHP%20versions.htm :
FastCgiServer /var/www/cgi-bin/php-cgi-5.3.1 -idle-timeout 120
Тайм-аут простоя устанавливает время в секундах, в течение которого apache ожидает, пока cgi что-то вернет.
Эта ошибка связана с базой данных, запросы которой выполняются за ней, либо ее индексация не выполняется должным образом, либо этот запрос выполняется медленно, пожалуйста, убедитесь, что ошибка больше никогда не появится