Прежде всего, жаль, что поставил вопрос, который, кажется, до сих пор был избит до смерти. Однако ни один из моих вопросов не помог мне решить мою конкретную проблему.
Я создал веб-приложение, которое запускает обширную процедуру обработки данных в PHP (т.е. Запросы MySQL, вычисления и т.д.).
В зависимости от объема данных, подаваемых в приложение, эта обработка может занять довольно много времени, поэтому сценарий должен запускаться на стороне сервера и независимо от веб-интерфейса.
Однако есть проблема. Кажется, я не могу контролировать время выполнения сценария, пока скрипт вызывается через cgi.
Когда я запускаю скрипт через SSH и командную строку, он отлично работает для того, сколько времени требуется для обработки данных.
Но если я использую команду exec()
в php-скрипте, вызванном через веб-сервер, я всегда заканчиваю ошибку. End of script output before headers
примерно через 45 секунд.
Вместо того, чтобы возиться с настройками сервера (кошмар с точки зрения переносимости), я хотел бы найти решение, которое запускает скрипт независимо от cgi.
Какие-либо предложения?
Не выполняйте длинный скрипт непосредственно с веб-сайта (AKA, прямо из Apache), потому что, как вы уже упоминали, он будет блокироваться до тех пор, пока он не завершится и, возможно, тайм-аут. Вместо этого используйте веб-сайт для планирования задания (выполнения длинного скрипта), которое будет запущено немедленно.
Вот основные сведения о том, как вы можете это сделать:
job_id
, processing_status
, run_start_time
и другие соответствующие поляrun_start_time
, запустите его с помощью exec()
или другого исполнителя команд. Таким образом, команда не будет таймаутом, потому что она не запускается Apache, а демоном cron.
mod_fastcgi
по умолчанию