Обработка времени выполнения, установленного PHP-FPM и файлом PHP - PullRequest
0 голосов
/ 29 октября 2018

Я установил директиву request_terminate_timeout в файле конфигурации пула PHP-FPM, которая в настоящее время 100s, и я устанавливаю set_time_limit(600) для отдельного файла PHP. Но проблема в том, что сначала запускаются самые низкие триггеры, поэтому 600s никогда не применяется, чего я не ожидаю.

Возможно ли сохранить request_terminate_timeout в глобальном масштабе при установке более высокого значения для максимального времени выполнения в отдельных файлах PHP?

1 Ответ

0 голосов
/ 29 октября 2018

Я сталкивался с подобной проблемой раньше. Не совсем уверен, что это может соответствовать вашей проблеме, но я пытался документировать все, чтобы быть уверенным, что даю «безопасные» подсказки.

Жестокий ответ на ваш вопрос, я думаю, это НЕТ, потому что директивы, которые вы указываете в php-fpm.conf, в большинстве случаев не могут быть изменены с ini_set(), а set_time_limit - это почти не более чем удобная оболочка на ini_set().

set_time_limit должен только "перезаписать" директиву max_execution_time, потому что

они влияют только на время выполнения самого скрипта

(специальное примечание содержится в официальной документации ).

С другой стороны, request_terminate_timeout относится к FPM, поэтому мы говорим об уровне управления процессом здесь:

следует использовать, когда опция ini 'max_execution_time' не останавливается выполнение скрипта по какой-то причине.

Итак, чтобы попытаться ответить на вопрос, я думаю, проблема в том, что вы пытаетесь смешать что-то, обрабатываемое FPM (request_terminate_timeout), и то, что обрабатывается самим PHP (max_execution_time).

Использование max_execution_time вместо request_terminate_timeout (но использование его с реальной, максимальной верхней границей) должно решить проблему.

В описании max_execution_time в официальной документации есть подсказка об этой распространенной проблеме, а именно:

Ваш веб-сервер может иметь другие конфигурации тайм-аута, которые также могут прервать выполнение PHP. Apache имеет директиву Timeout, а IIS имеет Функция тайм-аута CGI. Оба по умолчанию до 300 секунд. Смотрите ваш веб-сервер документация для конкретных деталей.

Примечание. Некоторые переменные в этом уравнении могут даже зависеть от веб-сервера (пример: время ожидания чтения).

...