Запуск скрипта в обход nginx-а

akxxiv

Новичок
Ситуация такая. Есть долгоиграющий скрипт. Он запускается из браузера, а затем процесс отслеживается через аякс и выдается прогрессбар. На локалке под апачем все работает. Ставлю set_time_limit(0) и все работает хоть полчаса хоть час до победного.

А вот на серваке через какое-то время скрипт рубится. Думаю нджинкс его и рубит. Есть возможность запустить скрипт в обход нджинкса? Чтобы он работал до победного???

Какие есть варианты?
 

Adelf

Administrator
Команда форума
Запускай лучше отдельно процесс. И результаты пусть скидывает куда-нибудь. И оттуда уже то, что вызывается через аякс будет брать результаты, чтобы показать юзеру.
Делать что-то долгоиграющее через веб всегда нехорошо.
 

Adelf

Administrator
Команда форума
с помощью system и ей подобным функциям.
 

fixxxer

К.О.
Партнер клуба
Не надо из веба запускать что-то долгоиграющее. Число процессов апача (или php-fpm) ограничено, а один запрос обрабатывается одним процессом.

Это как если бы в макдональдсе уходящий на обед сотрудник обедал бы прямо на кассе, не давая возможности встать у этой кассы другому сотруднику. :)

Запускай отдельный процесс. Если это хостинг, где нет возможности его запустить по-человечески, самый простой способ - запускать раз в минуту кроном и проверять, есть ли для него работа.
 

akxxiv

Новичок
fixxxer, можешь дать пример как это сделать? Честно говоря для меня командная строка остается пока делом темным... Порыл в нете, нашел такой пример:
Код:
exec("php /www/site/script.php >>/www/logs/script.log 2>&1 &");
  1. Ну, php - это понятно, типа чем программа будет исполняться,
  2. /www/site/script.php - тоже ясно
  3. /www/logs/script.log - это куда будет направлен вывод того что наисполнял скрипт
  4. А вот что значит >> перед /www/logs/script.log ???
  5. Что значит конструкция 2>&1 ??
  6. Зачем нужен & в конце строки?
  7. Как передать параметры в этот скрипт?
  8. Как сделать так, чтобы РНР скрипт, запускающий этот exec не дожидался ответа, а работал дальше?
 

fixxxer

К.О.
Партнер клуба
По вопросам - изучи, как пользоваться юникс-шеллом, и все вопросы отпадут.

Но это вообще неправильно - делать exec из апача/fpm, так ты становишься в зависимость от работы воркера апача или fpm, который (в случае динамического числа воркеров) может захотеть сдохнуть хоть бы через 10 секунд - а дальше либо потянет твой процесс за собой, либо наоборот твой процесс заблокирует рестарт воркера и он "залипнет".

Запусти просто отдельный процесс, который будет работать в бесконечном цикле. Проверяет наличие задания для него (скажем, читая какой-то файл), если делать нечего - sleep(30) и так далее.
 
Сверху