| Summary: | Долго завершается при service httpd2 stop | ||
|---|---|---|---|
| Product: | Sisyphus | Reporter: | Vladimir V. Kamarzin <vvk> |
| Component: | apache2 | Assignee: | Anton Farygin <rider> |
| Status: | CLOSED FIXED | QA Contact: | qa-sisyphus |
| Severity: | critical | ||
| Priority: | P2 | CC: | rider, snejok |
| Version: | unstable | ||
| Hardware: | all | ||
| OS: | Linux | ||
| Bug Depends on: | |||
| Bug Blocks: | 27091 | ||
Нелбзя: при особо удачном стечении обстоятельств killall может завершить процесс используемый httpd-alterator`ом. Ну и что делать? Текущая ситуация никуда не годится. Буду вставлять задержку. Если несложно -- прошу подобрать приемлимаю (у меня ситуация не воспроизводится). Упс, пример с 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.
sleep -- это всегда зависимость от скорости и загрузки системы... очень мрачный вариант. java в начале века народ стартовал и гасил, через секунду в цикле проверяя -- ну как оно там, взлетело/легло? OK, тогда сейчас жёстко делаю секкунду, позже -- думаю над циклом с проверкой. Частичный фикс в apache2-2.2.4-alt22 (http://git.altlinux.org/people/solo/packages/?p=apache2.git;a=commit;h=2fc1f8e5935b5629b762401d48520fd07a53d0e2): Добавлено sleep 1 PS: Багу пока не закрываю: пусть весит до полного фикса (через цикл). (В ответ на комментарий №1)
> Нелбзя: при особо удачном стечении обстоятельств killall может завершить
> процесс
> используемый httpd-alterator`ом.
Этого можно больше не боятся: теперь у alterator'а свой сервер, под названием ahttpd
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) |
Я обнаружил, что иногда при 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-м апаче.