LINUX.ORG.RU

HTTP-сервер и длительные процессы


0

0

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

можно ли как-то заставить апач для конкретного скрипта не килять по таймауту?

я пробовал выдавать длинный RFC-заголовок, нечто вроде:

X-My-Header: timestamp
  timestamp
  timestamp
  ...

и таким образом генерить траффик пока скрипт работает, однако апач все равно киляет такой CGI.

вопрос, как можно: с одной стороны не выдавать контент пока скрипт не завершит основную работу а с другой стороны какой надо генерить трафик чтобы апач скрипт не килял?

если берем CGI и выдаем содержимое /dev/urandom после заголовка (в тело ответа), то wget на такое может работать часами: апач его не киляет. но в тело выпихивать лишний трафик очень не хочется.

как выкрутиться, как избежать килла по таймаутам? не меняя дефолтных настроек таймаутов на апаче

★★
Ответ на: комментарий от dimon555

а как тут fastcgi может помочь?

rsync ★★
() автор топика

Позакрывайте 0,1 и 2 и сделайте процесс «демоном». У меня в задачах управления такие CGI сутками работают. Первым обращением запускаете CGI, сообщаете пользователю, чтобы ждал. Ну и можете по таймеру проверять статус и показывать, сколько осталось ждать.

Eddy_Em ☆☆☆☆☆
()

Я бы сделал отдельный загрузчик долгой CGI, саму CGI форкал бы в background и научил бы CGI отображать процесс выполнения. В итоге - прогресс-бар на страничке и юзер доволен, загрузчик отработал и таймаута не было - апач доволен, CGI таки отрабатывает своё - админ доволен. Только имхо будет слабое место для атак DDoS.

Northsoft ★★
()

Может, через .htaccess что-нибудь получится? Но таки да - форкаться и работать в фоне правильней

no-dashi ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.