[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Если скрипт выполняется дольше чем max_execution_t
firstfrost
Здравствуйте! Есть необходимость выполнять объемный скрипт, состоящий из однотипных итераций. Чтобы его выполнение не "резалось", он был разделен на части. После завершения текущий части идет вызов следующей через curl.
Верно ли составлен алгоритм, в котором по завершению текущей части, она запускает следующую? Тестирование показывает что 9 из 11 частей срабатывают, а потом 504 и оставшиеся части обрубаются.

Подскажите, как можно решить этот вопрос? Есть ли альтернатива запуску по cron, чтобы запуск каждой следующий части был сразу после завершения текущей?
Guest
Цитата
Есть ли альтернатива запуску по cron

Вообще-то именно так и нужно. И не нужно будет делить на части.

Цитата
504

А если запускаешь через браузер – другие части дергай не с сервера, а с клиента.
firstfrost
Цитата (Guest @ 25.04.2016 - 13:00)
Цитата
Есть ли альтернатива запуску по cron

Вообще-то именно так и нужно. И не нужно будет делить на части.

Цитата
504

А если запускаешь через браузер – другие части дергай не с сервера, а с клиента.

Цитата
Вообще-то именно так и нужно. И не нужно будет делить на части.

Делить на части нужно в любом случае, т.к. выполнение всех итераций за 1 проход дольше максимального времени выполнения скрипта.

Цитата
А если запускаешь через браузер – другие части дергай не с сервера, а с клиента.

Запуск первой части происходит через cron в определенное время, соответственно, ajax тут врятли поможет.
Guest
Запускаешь через cron как? Через веб-сервер (иначе кто же тогда 504 отдает):
curl http://site.ru/script.php

Если так – то это неправильно.

Нужно так:
php /home/www/site.ru/script.php

firstfrost
да, запускаю через curl, т.к. нужно передать GET-данные.
насколько я знаю, при вызове через php ... GET-переменные не работают.
Верно?
Guest
Не работают.
Передают через командную строку:
php /home/www/site.ru/script.php param1 param2 paramN

http://php.net/manual/ru/reserved.variables.argv.php
firstfrost
Благодарю!
Какие преимущества дает запуск через php ...?
Как это поможет решить данный вопрос?
Guest
Ну как минимум не упрешься в Nginx'овский max_execution_time.
Если у тебя VPS/свой сервер – то просто пропиши set_time_limit(0) и не нужно будет делить скрипт на части.
А если shared-хостинг или еще по каким-то причинам нельзя сделать set_time_limit(0) – то следующую часть запускай "асинхронно":
part1.php:

...
shell_exec('php /home/www/site.ru/part2.php &'); // вообще погугли как это правильно делать
exit(0);


Кстати, думаю это должно сработать и если будешь через curl запускать. Может даже не потребуется вообще ничего переделывать.
killer8080
Цитата (firstfrost @ 25.04.2016 - 13:24)
Какие преимущества дает запуск через php ...?

тем что задача запускается в бэкграунде и не отнимает у вебсервера ресурсы понапрасну.
В CLI php использует другой ini файл, в котором обычно по дефолту нет ограничения времени выполнения. Кстати этот момент нужно учитывать, т.к. нужные расширения в нем могут быть не подключены, тогда нужно передать требуемые ini опции аргументами.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.