Intereting Posts

Длительный сценарий PHP останавливается при вызове через exec (), но заканчивается при вызове через CLI

У меня есть куча скриптов, которые занимают много времени. Некоторые из них могут занимать до 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-минутный скрипт в браузере.