Я использую последний Google App Engine PHP SDK, v1.9.38, для запуска некоторых долго выполняющихся сценариев на локальном сервере разработчика, и по какой-то причине они истекают через 30 секунд. Ошибка, например, «Неустранимая ошибка: запрос был прерван, поскольку он превысил максимальное время выполнения. В [my path path] \ timertest.php в строке 8»
Предполагается, что время автоматического масштабирования составляет 60 секунд! Я не уверен, что мне здесь не хватает … Я делаю различные операции с файлами в одном скрипте, но затем я написал тестовый скрипт, чтобы проверить, не сработал ли он и через 30 секунд, и это произошло. Сценарий:
<?php
$a = 1;
do
{
syslog(LOG_INFO, $a.' Sleeping for 10 secs...\n');
sleep(10);
$a++;
}
while($a < 8)
?>
Выход:
INFO: 1 Sleeping for 10 secs...\n
INFO: 2 Sleeping for 10 secs...\n
INFO: 3 Sleeping for 10 secs...\n
ERROR:root:php failure (255) with:
stdout:
X-Powered-By: PHP/5.5.26
Content-type: text/html
<br />
<b>Fatal error</b>: The request was aborted because it exceeded the maximum execution time. in <b>[my script path]\timertest.php</b> on line <b>8</b><br />
INFO 2016-06-02 20:52:56,693 module.py:788] default: "GET /testing/timertest.php HTTP/1.1" 500 195
Я думал, что это была ошибка конфигурации где-то, но не уверен, что или где. Мой app.yaml очень стандартный:
application: ak2016-1
version: 1
runtime: php55
api_version: 1
handlers:
# Serve php scripts.
- url: /(.+\.php)$
script: \1
login: admin
и php.ini тоже:
google_app_engine.disable_readonly_filesystem = 1
upload_max_filesize = 8M
display_errors = "1"display_startup_errors = "1"
Как я уже сказал, это проблема только локального сервера dev SDK, меня не беспокоит вопрос о том, что происходит в режиме реального времени, так как файлы, которые я обрабатываю, являются локальными (и должны оставаться таковыми).
Спасибо за любые предложения и т.д!
Я развернул пример приложения на Таймер запроса документация, и не смог продублировать вашу проблему. Мои запросы все время ожидания после ~ 60 секунд:
$ time curl https://<project-id>.appspot.com/timeout.php
Got timeout! Cleaning up...
real 1m0.127s
user 0m0.021s
sys 0m0.010s
Затем я скопировал ваш код, app.yaml
, а также php.ini
чтобы посмотреть, смогу ли я дублировать это, и получил следующее в моих системных журналах:
INFO: 1 Sleeping for 10 secs...\n
INFO: 2 Sleeping for 10 secs...\n
INFO: 3 Sleeping for 10 secs...\n
INFO: 4 Sleeping for 10 secs...\n
INFO: 5 Sleeping for 10 secs...\n
INFO: 6 Sleeping for 10 secs...\n
INFO: PHP Fatal error: The request was aborted because it exceeded the maximum execution time. in /base/data/home/apps/.../timeout2.php on line 9
Тем не менее, если у вас по-прежнему возникают проблемы с истечением времени ожидания запросов через 30 секунд, я бы предложил перенести нарушающий код в очереди задач. Надеюсь, это поможет!
Других решений пока нет …