отвязать апач от php-скриптов запускаемых из-под него

Вопросы связанные с работой Apache

Модераторы: Art.i, vasya

отвязать апач от php-скриптов запускаемых из-под него

Сообщение TG » Ср дек 01, 2010 8:15 am

есть ли возможность сабжа?
т.е. сделать так, чтобы апач не ждал бы ответ от пхп-скрипта, который запущен из браузера
и соотв., не гасил бы пхп-процесс, не дождавшись этого ответа по таймауту
недавно перешёл на "всё новое", FreeBSD-8.0, apache 2.2 MPM и возникла проблема "гашения" (php запускается как cgi)
раньше сидел на предыдущей FreeBSD 6 и предыдущем апаче 2 - не было такого
т.е. я запускал пхп-скрипт из браузера, после чего он работал сколько ему надо, и апач его не гасил
можно было вобще убивать httpd процесс в консоли, из под которого скрипт запускался - при этом php-cgi продолжал висеть в процессах и работать
сейчас, увы, не так
httpd-процесс убить нельзя - php-cgi тоже отваливается
но это ещё ладно, но апач теперь ждёт ответа от пхп-скрипта и не дождавшись, пишет в лог:
[error] Script timed out before returning headers: php
[warn] Timeout waiting for output from CGI script /home/user/data/php-bin/php
и гасит php-cgi
пробовал менять принадлежность скрипта (от рута юзеру) - всё равно гасит, но как-то "через раз" (закономерности не выявил)
конечно, можно запускать пхп-скрипт из консоли (т.к. консольный он), но это мне не удобно
браузер открыт всегда, а в консоль ещё лезть нужно и логиниться
увеличение таймаута апача - это не тот путь, который нужен
нужно решение, чтобы апач совсем "забывал" про запущенный из-под него пхп-скрипт и не тревожил бы его
TG
 
Сообщений: 3
Зарегистрирован: Ср дек 01, 2010 7:52 am

Сообщение ls » Чт дек 02, 2010 8:47 pm

Лучше такие скрипты запускать шелл, вам именно через apache надо?
* FirstVDS в twitter в facebook и в вконтакте *
ls
Support team
 
Сообщений: 6405
Зарегистрирован: Чт мар 01, 2007 10:36 am
Откуда: FirstVDS

Сообщение TG » Чт дек 02, 2010 9:37 pm

угу, очень желательно через апач (т.е. через браузер)
меня так же интересует, почему на предыдущем апаче не возникало подобных проблем и почему они стали возникать на apache 2.2 MPM
TG
 
Сообщений: 3
Зарегистрирован: Ср дек 01, 2010 7:52 am

Сообщение swg » Чт дек 02, 2010 11:41 pm

Может вариант: доступный файл через браузер будет что-то вроде <?php exec('nohup /usr/local/bin/php...'); ?> (ключевое - nohup), а в скрипте, который запускается <?php set_time_limit(0); ...
Но, видимо, здесь надо от root запускать...

Еще вариант, для скриптов, которые должны работать всегда: запускать через cron и проверять не запущен ли. Я проверяю через socket - что-то вроде ping, который спрашивает версию и если версия отличается - то происходит завершение запущенного и стартует новый. Удобно для обновления - SSH не нужен.
swg
флудит форум
 
Сообщений: 2386
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Сообщение TG » Пт дек 03, 2010 12:10 pm

попробовал через экзек с нохапом
вроде работает, но лишние процессы php-cgi и sh в памяти висят (потом пропадают)
в принципе, не критично
ну и допфайлик делать приходится для каждого скрипта
но это лучше, чем ничего, спасибо

и всё же, сисадмины, ау - почему же апач стал такой привязчивый, ведь раньше он хорошо себя вёл...
как снова заставить его забыть о скрипте, запускаемом из-под него?
есть ли какой-нибудь "нохап" специально для апача?
TG
 
Сообщений: 3
Зарегистрирован: Ср дек 01, 2010 7:52 am

Сообщение Alexander* » Пт дек 03, 2010 5:08 pm

Не знаю наверное не в тему, но была нужда запускать скрипт каждые пять-десять секунд. Единственное что устроило, это запуск elinks в скрине ну и соответственно html-тег (refresh content="5")
Php-скриптом у меня запускается определенный процесс, соответственно вначале скрипта проверяется существование процесса. Если до сих пор выполняется, то новый не запускается.
Alexander*
 
Сообщений: 78
Зарегистрирован: Вс авг 17, 2008 6:18 pm

Сообщение swg » Пт дек 03, 2010 8:26 pm

Alexander* писал(а):Не знаю наверное не в тему, но была нужда запускать скрипт каждые пять-десять секунд. Единственное что устроило, это запуск elinks в скрине ну и соответственно html-тег (refresh content="5")


в cron по @reboot добавить запуск такого скрипта:
<?php while(true){ sleep(mt_rand(5,10)); exec('/usr/local/bin/wget ...' ) ; }?>
- пожалуйста, каждые 5-10 секунд.
swg
флудит форум
 
Сообщений: 2386
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Сообщение Alexander* » Сб дек 04, 2010 6:11 am

Так я пробовал, висит куча лишних тяжелых процессов. Ведь процесс php-cgi будет ждать выполнения wget, а если отвязаться от него по exit() следующее задание по крону выполнится через 60 сек. долго ждать.
Alexander*
 
Сообщений: 78
Зарегистрирован: Вс авг 17, 2008 6:18 pm

Сообщение swg » Сб дек 04, 2010 10:31 am

Alexander* писал(а): ... а если отвязаться от него по exit() следующее задание по крону выполнится через 60 сек. долго ждать.

В том то и дело, что нет. Где вы вообще 60 секунд увидели? while(true) { sleep(5) ... } !!! Запускающий скрипт один, по @reboot - а это не "* * * * *". Ну если хотите отвязаться, то не exit, а pcntl_fork внутри скрипта. И что там будет тяжелого, которое побъет apache через ваш вариант ? )))
swg
флудит форум
 
Сообщений: 2386
Зарегистрирован: Сб окт 07, 2006 9:09 am
Откуда: NNov

Сообщение Alexander* » Сб дек 04, 2010 1:20 pm

Про pcntl_fork знать не знал, подискутировать не с кем, то бишь знаний маловато.
Просто то же самый wget, curl бывает долго выполняется, либо вообще висит и сам не завершается, если сам хост с которого тянешь недоступен. Поэтому и запускаю и убиваю если долго висит php-скриптом. Теперь уже подумываю смотреть скриптом загрузку сервера, т.е. если памяти нема, то и не зачем запускать другие процессы.
Alexander*
 
Сообщений: 78
Зарегистрирован: Вс авг 17, 2008 6:18 pm


Вернуться в Apache

Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1