Bug 11531 - Долго завершается при service httpd2 stop
: Долго завершается при service httpd2 stop
Status: CLOSED FIXED
: Sisyphus
(All bugs in Sisyphus/apache2)
: unstable
: all Linux
: P2 critical
Assigned To:
:
:
:
:
: 27091
  Show dependency tree
 
Reported: 2007-04-17 13:10 by
Modified: 2012-08-13 14:06 (History)


Attachments


Note

You need to log in before you can comment on or make changes to this bug.


Description From 2007-04-17 13:10:55
Я обнаружил, что иногда при service httpd2 restart он не стартует с ошибкой:
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:8080
no listening sockets available, shutting down

Небольшой тест показывает удручающую картину:

root@vvk ~ # for i in `seq 1 10` ; do service httpd2 restart |grep -ic failed ;
done |awk '{ sum += $1 }; END { print sum }'
8

Если вставить задержку, ситуация немного лучше

root@vvk ~ # for i in `seq 1 10` ; do service httpd2 restart |grep -ic failed ;
sleep 5; done |awk '{ sum += $1 }; END { print sum }'
5

Похоже, в инитскрипт нужно встроить killall, как в 1-м апаче.
------- Comment #1 From 2007-04-17 13:31:43 -------
Нелбзя: при особо удачном стечении обстоятельств killall может завершить
процесс
используемый httpd-alterator`ом.
------- Comment #2 From 2007-04-17 13:46:13 -------
Ну и что делать? Текущая ситуация никуда не годится.
------- Comment #3 From 2007-04-17 13:59:38 -------
Буду вставлять задержку.

Если несложно -- прошу подобрать приемлимаю (у меня ситуация не воспроизводится).
------- Comment #4 From 2007-04-18 09:41:10 -------
Упс, пример с sleep из первого комментария был неудачным. Так лучше:

root@vvk ~ # for i in `seq 1 30` ; do service httpd2 stop ; sleep 1 ; service
httpd2 start |grep -ic failed ; done |awk '{ sum += $1 }; END { print sum }' ;
killall -9 httpd2
0

Видно, что при встраивании даже 1-секундной паузы ситуация сильно улучшается -
30 рестартов рошли успешно. При уменьшении интервала до 0.85 с. было уже 5
неудачных стартов, до 0.5 - 12.
------- Comment #5 From 2007-04-18 10:35:38 -------
sleep -- это всегда зависимость от скорости и загрузки системы... очень мрачный
вариант.

java в начале века народ стартовал и гасил, через секунду в цикле проверяя --
ну
как оно там, взлетело/легло?
------- Comment #6 From 2007-04-18 11:24:54 -------
OK, тогда сейчас жёстко делаю секкунду, позже -- думаю над циклом с проверкой.
------- Comment #7 From 2007-04-25 19:34:07 -------
Частичный фикс в apache2-2.2.4-alt22
(http://git.altlinux.org/people/solo/packages/?p=apache2.git;a=commit;h=2fc1f8e5935b5629b762401d48520fd07a53d0e2):

Добавлено sleep 1

PS: Багу пока не закрываю: пусть весит до полного фикса (через цикл).
------- Comment #8 From 2012-04-17 14:56:53 -------
(В ответ на комментарий №1)
> Нелбзя: при особо удачном стечении обстоятельств killall может завершить
> процесс
> используемый httpd-alterator`ом.

Этого можно больше не боятся: теперь у alterator'а свой сервер, под названием
ahttpd
------- Comment #9 From 2012-08-10 23:40:05 -------
apache2-2.2.22-alt4 -> sisyphus:

* Fri Aug 10 2012 2012 Aleksey Avdeev <solo@altlinux> 2.2.22-alt4
- %apache2_sbindir/apachectl%apache2_branch replaced by the "official"
  apachectl (patched) (Closes: #27086)
- The function stop() in %_initdir/%apache2_dname now waiting
  (maximum 300 seconds) of the actual completion of the demon
  (Closes: #11531, #27091)