Summary: | Некорректная остановка squid | ||||||
---|---|---|---|---|---|---|---|
Product: | Sisyphus | Reporter: | Alex Moskalenko <mav> | ||||
Component: | squid | Assignee: | Alexey Shabalin <shaba> | ||||
Status: | CLOSED FIXED | QA Contact: | qa-sisyphus | ||||
Severity: | normal | ||||||
Priority: | P3 | CC: | led, shaba | ||||
Version: | unstable | ||||||
Hardware: | all | ||||||
OS: | Linux | ||||||
Attachments: |
|
Description
Alex Moskalenko
2013-07-29 14:17:12 MSK
В 3.2.13-alt2 вроде бы исправил. Когда дойдёт до репозитория посмотрите, пожалуйста, устраивает ли такое поведение (stop и restart) squid-3.2.13-alt2 -> sisyphus: * Tue Jul 30 2013 Led <led@altlinux> 3.2.13-alt2 - squid.init: fixed stopping service (ALT#29236) Спасибо, поведение сильно лучше, чем раньше. :) Есть пара мыслей по этому поводу: 1. Есть смысл ввести обработку SQUID_SHUTDOWN_TIMEOUT из /etc/sysconfig/squid. В текущем варианте, если процесс squid помирать откажется (по разным причинам - сбой диска, например), мы получим бесконечное ожидание при его завершении. Предлагаю ждать определенное время, настраиваемое в /etc/sysconfig/squid. 2. Возможно, есть смысл обработать cache_effective_user из /etc/squid/squid.conf аналогично pid-файлу, и использовать полученное значение, вместо жесткого задания в squid. Created attachment 5906 [details]
Патч на squid.init
Вариант патча для squid.init, реализующий таймаут при остановке и обработку cache_effective_user
Переоткрою багу, так как думаю, что обработка таймаута при остановке squid все-таки нужна. (В ответ на комментарий №4) > Created an attachment (id=5906) [details] > Патч на squid.init > > Вариант патча для squid.init, реализующий таймаут при остановке и обработку > cache_effective_user С SQUIDUSER - согласен. С SQUID_SHUTDOWN_TIMEOUT=60 - не очень. Таймаут задаётся в конфиге параметром shutdown_lifetime - его и нужно использовать (или дефолтные 30 секунд, если не задан), а не абстрактные 60 секунд. Плюс 5 секунд накидываем сверху "на всякий случай" (по тестам получается, что нужно сверх 1-3 секунды). См. http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=89d9197e7d5217a775c3264f63d0a338165f266b Ну и следующий за ним http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=9b5cb51a1c09333a780686a3ace00bd375c12e6b в котором опять всё упрощаем и используем для остановки по таймауту стандартный stop_daemon(). При этом, если не дождались (почему-то), процесс прибивается с -9. Если конструктивных возражений не будет, этот вариант и пойдёт на сборку. По-моему, в http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=9b5cb51a1c09333a780686a3ace00bd375c12e6b все упростили настолько, что потеряли собственно цель - гасить squid с помощью squid -k shutdown. :) Предлагаю "упростить" только цикл остановки по таймауту, а функцию stop() начать с чего-то типа if start-stop-daemon -q --pid "$PIDFILE" --user $SQUID_USER --stop --test >/dev/null; then msg_stopping $"squid" $SQUID -f "$SQUID_CONF" -k shutdown *** далее остановка по таймауту *** fi (В ответ на комментарий №7) > По-моему, в > http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=9b5cb51a1c09333a780686a3ace00bd375c12e6b > все упростили настолько, что потеряли собственно цель - гасить squid с помощью > squid -k shutdown. :) stop_daemon() делает ровно то же, что и "squid -k shutdown" - посылает процессу с указанным pid'ом сигнал TERM. Просто без --retry он, не дожидаясь, посылал сразу же KILL. Поэтому разницы никакой, зато на порядок проще и "стандартнее". (В ответ на комментарий №8) > stop_daemon() делает ровно то же, что и "squid -k shutdown" - посылает процессу > с указанным pid'ом сигнал TERM. Просто без --retry он, не дожидаясь, посылал > сразу же KILL. > Поэтому разницы никакой, зато на порядок проще и "стандартнее". Если так - тогда возражений нет. squid-3.2.13-alt3 -> sisyphus: * Wed Aug 14 2013 Led <led@altlinux> 3.2.13-alt3 - squid.init: use config values for shutdown timeout and effective squid user (ALT#29236) (В ответ на комментарий №6) > (В ответ на комментарий №4) > С SQUID_SHUTDOWN_TIMEOUT=60 - не очень. > > Таймаут задаётся в конфиге параметром shutdown_lifetime - его и нужно > использовать (или дефолтные 30 секунд, если не задан), а не абстрактные 60 > секунд. Плюс 5 секунд накидываем сверху "на всякий случай" (по тестам > получается, что нужно сверх 1-3 секунды). А как Вы считаете, не следует ли абстрактные 5 секунд, накинутые сверху, заменить переменной типа SQUID_EXTRA_SHUTDOWN_TIMEOUT (вместо SQUID_SHUTDOWN_TIMEOUT, которую вообще убрать из /etc/sysconfig/squid), и дать возможность настраивать эти "на всякий случай накидываемые" секунды, с умолчанием в те же 5 секунд например? Случаи разные могут быть, 5 секунд может и не хватить (пример - параллельная остановка нескольких контейнеров OpenVZ, squid в одном из них. 5 секунд может не хватить для корректной остановки). PS Состояние баги не меняю, так как она таки RESOLVED. Если этот пакет скопировать в p7, то я его протестирую и базу закрою/переоткрою. (В ответ на комментарий №11) http://git.altlinux.org/people/led/packages/?p=squid.git;a=commit;h=5b12e87c8a54916050aa3ce675ebe844c6c15fd2 * Fri Aug 16 2013 Led <led@altlinux.ru> 3.2.13-alt4 - squid.init: made SQUID_EXTRA_SHUTDOWN_TIMEOUT configurable Спасибо, работает замечательно. |