The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Debian запрещает использование в пакетах секции со специфичн..."
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Отдельный RSS теперь доступен для каждого обсуждения в форуме и каждого минипортала.
. "Debian запрещает использование в пакетах секции со специфичн..." +7 +/
Сообщение от Stax (ok), 14-Ноя-18, 14:35 
Это правда. Заменял я в одном проекте SysV инитскрипт, где использовалась обертка для перехвата stdout/stderr и записи их в лог + перезапуск на простое нативное решение под systemd и upstart. Под systemd все круто - немного упрощений, переключение приложения для запуска без демонизации, все остальное делает сам systemd. Потом еще добавили systemd_notify из приложения и стало совсем шоколадно, приложение нормально оповещает, когда оно реально стартовало (иногда стартовать может должго и это помогает).

А вот с upstart мучался, но ничего не вышло: stdout/stderr перехватывать он не умеет (т.е. в теории с некой версии вроде научился, но зачем нужна эта версия, если все свежайшие дистрибутивы выкинули upstart в пользу systemd, а в поддерживаемых с upstart типа RHEL 6 никто уже не обновит этот самый upstart для поддержки последних фич?); т.е. обертку для перехвата логов не выкинуть. Далее, перезапуск (фича respawn) жутко бажная и фактически не может использоваться для тяжелых сервисов, т.к. там долгая инициализация и останов, у upstart в такой ситуации сносит крышу и он начинает делать respawn при обычном останове, в итоге остановить сервис невозможно. Баг 568288 - его сейчас как бы тоже уже поправили, но кому от этого легче, если в том же RHEL6 фикс никогда не войдет? Да и если бы вошел, мы тут же оказались бы в области бага 703800, висящего на upstart с 2011 года и который никто никогда не почесался исправить. Остановка сервиса выполнением команды, а не отправкой сигнала глючная донельзя.

Ок, перезапускать средствами upstart что-либо тяжелее cron'а значит нельзя, stdout/stderr перехватывать тоже. Оставляем, значит, наши обертки - но они тоже не работают! Т.к. upstart имеет всего три механизма самостоятельного отслеживания PID'ов - когда процесс не форкается, когда форкается один раз и когда форкается два раза. Берет, соответственно, PID непосредственного ребенка, ребенка ребенка или ребенка ребенка ребенка. Все. Если наша перезапускалка может перезапускать больше двух раз (а перезапускается она форкаясь себя саму), отслеживание не работает, upstart процесс просто не видит и считает что все умерло. Можно сколько угодно ругать Поттеринга за сложный systemd, завязанный на cgroups, но там механизм отслеживания хотя бы на 100% надежный и полагается на работу групп в ядре, а не самописные костыли, ломающиеся от мало-мальски сложного сервиса.

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Debian запрещает использование в пакетах секции со специфичн..., opennews, 14-Ноя-18, 10:28  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру