У меня есть куча скриптов, которые занимают много времени. Некоторые из них могут занимать до 20 минут.
Существует сценарий Bash, который выполняет эти PHP-скрипты. Когда я называю этот сценарий Bash через CLI как root, все скрипты PHP заканчиваются без проблем. Но когда я вызываю скрипт Bash с помощью функции exec () PHP через браузер, скрипты внезапно останавливаются через 7/8 минут, не вызывая никаких ошибок.
Есть ли определенное ограничение на время выполнения процесса или скрипта при выполнении через Apache / PHP?
Я пробовал:
set_time_limit(0)
exec('nohup /path/to/bashscript')
exec('/path/to/bashscript | at now')
Последние два проверенных решения были рекомендованы другими, у которых были проблемы с длинными сценариями, но это мне совсем не помогает.
Примечание. Сценарий Bash, выполняющий скрипты PHP, представляет собой консольное приложение CakePHP. Я должен выполнить скрипты PHP через этот сценарий Bash, чтобы использовать все функции CakePHP (модели, методы оболочки и т. Д.). И мне нужно иметь возможность вызвать скрипт Bash через браузер и позволить ему работать в фоновом режиме.
Сервер является VPS и установлен WHM / cPanel.
вам нужно увеличить максимальное время выполнения, используя (осторожно, когда вы устанавливаете 0, это делает ваше время выполнения бесконечным)
ini_set('max_execution_time', 0);
но я бы порекомендовал пользователю
proc_open();
over exec (); это будет транслировать ваши процессы, и вы можете также выполнять другие процессы. Подробнее о proc_open [ЗДЕСЬ] http://www.sitepoint.com/proc-open-communicate-with-the-outside-world/ !
Задавать:
ini_set('max_execution_time', 0);
на самом верху вашего скрипта. Это приведет к отключению временных ограничений. Однако imo не имеет смысла исполнять 20-минутный скрипт в браузере.