The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Debian запрещает использование в пакетах секции со специфичн..."
Отправлено Stax, 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% надежный и полагается на работу групп в ядре, а не самописные костыли, ломающиеся от мало-мальски сложного сервиса.

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



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

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