@pro_enterpriseЭта группа больше не существует

Страница 1312 из 1317
Vladimir
21.07.2017
16:09:46
то есть нужно чтобы рестарт не убил рабочую копию демона

Vladislav
21.07.2017
16:09:47
чтобы пока работает (старый) - был ок, упал - не ок, имхо так правильее

Vladimir
21.07.2017
16:11:21
чтобы пока работает (старый) - был ок, упал - не ок, имхо так правильее
ок, давай формально распишем: 1. Есть демон, он работает нормально 2. Демон умеет reload по SIGUSR1 и поэтому reload трогать нельзя 3. Если происходит рестарт нужно проверить валидность конфига (допустим демон умеет -t) и если конфиг не валиден прервать рестарт с exit code != 0 (то есть сфейлится). При этом нельзя убивать рабочую копию демона 4. После этого status должен показывать что все ОК 5. Рестарт должен корректно отработать как только конфиг починится - убить старый демон и запустить новый 6. Это не должно подменять systemctl, как либо патчить systemd и т.п.

Vladislav
21.07.2017
16:12:28
окей. кстати можно KillMode=none заюзать + SendSIGKILL=no, группа не помрет

Google
Vladimir
21.07.2017
16:12:40
ты не сможешь средствами системд остановить старый демон

Vladislav
21.07.2017
16:12:57
с чего бы?

Vladimir
21.07.2017
16:13:01
с чего бы?
проверь )

с чего бы?
я думаешь не пытался это сделать? )

Vladislav
21.07.2017
16:13:36
хочешь сказать, что ExecStop не будет выполняться?

Vladimir
21.07.2017
16:14:04
хочешь сказать, что ExecStop не будет выполняться?
как только пройдет таймут системд посчитает что демон успешно остановлен

при этом демон продолжит работать

но больше не будет управляться системдшкой

то есть статус будет говорить stopped

systemctl stop будет говорить "already stopped"

когда конфиг починится системд запустит вторую копию (если это возможно)

и это в некоторых случаях может иметь катастрофические последствия

Google
Vladimir
21.07.2017
16:15:49
я знаю пару рабочих решений но со внешними скриптамио по сути

я не знаю ни одного рабочего решения работающего в рамках одного юнита системд

Vladislav
21.07.2017
16:16:48
запускам враппер, который форкается в sleep c ожиданием SIGUSR1, кормим его пид системд, отключаем посыл кила группе, меняем терм сигнал на usr1 в системд, в форке по usr1 извещаем паренту о требовании смерти, в паренте чекаем конфиг, если все ок, убиваем форк, умираем сами, системд перезапустит все остальное

если конфиг не ок, игнорим сигнал, работаем форком дальше

Vladimir
21.07.2017
16:17:29
ты проверь решение сначала

Vladislav
21.07.2017
16:17:37
должно работать в рамках одного юнита + скрипт, хоть на баше, хоть на си и т.д.

Vladimir
21.07.2017
16:17:46
ну ты проверь что решение работает

у systemd есть особенность

Vladislav
21.07.2017
16:17:57
ты проверь решение сначала
для этого мне надо будет systemd поставить )

Vladimir
21.07.2017
16:18:03
все запущенное дерево будет в одной cgroup'е

если после стопа остаются пиды после таймаута, они получат KillSignal

Sergey
21.07.2017
16:18:30
если конфиг не ок, игнорим сигнал, работаем форком дальше
но тогда если конфиг не ок, systemd добьет всё через таймаут

Vladimir
21.07.2017
16:18:33
поэтому если оно форкается - то форк тоже будет в группе и получит сигнал

с двумя юнитами такое сработает

Vladislav
21.07.2017
16:18:58
Vladimir
21.07.2017
16:19:01
точнее почти сработает

а почему будет таймаут?
оно умное, оно чекает все дерево процессов

Vladislav
21.07.2017
16:19:13
чушь

Vladimir
21.07.2017
16:19:19
чушь
предлагаю проверить

Sergey
21.07.2017
16:19:25
чушь
ну вам виднее.

Google
Vladimir
21.07.2017
16:19:28
не чушь, потому что я проверял

даже более того - мне эта фича нравится в нем

Vladislav
21.07.2017
16:19:48
если процес форкнется с новым sid/gid и репарент сделает, то он будет совершенно другим

Vladislav
21.07.2017
16:20:06
ну вам виднее.
ну я знаю немношк, как ядро с пидами работает

Vladimir
21.07.2017
16:20:07
нужно чтобы у тебя были права выйти из группы

Vladislav
21.07.2017
16:20:09
и группами

Vladimir
21.07.2017
16:20:44
а прав нет?
когда как, смотря какой демон

Vladislav
21.07.2017
16:20:46
запусать враппер с нужными правами, из него запускать демона с нужными ему, если оно само не умеет

Vladimir
21.07.2017
16:21:02
тогда тебе нужно сделать новый юнит, работающий от рута, который будет делать весь реальный process management

следить кто в какой группе

и т.п.

плюс этот скрипт должен будет висеть и не дохнуть

т.к. если он сдохнет то эти процессы будут бесхозными, системд это перезапустит и будет пипец

то есть тебе надо будет писать stateful систему менеджмента процессов, устойчивую к падению управляюещго процесса

когда ты это напишешь тебе надо будет ответить на вопрос зачем тебе системд, если самую сложную часть инита ты уже переписал?

Vladislav
21.07.2017
16:22:52
угу, механика получается сложноватое с fsm-like обработкой состояний )

Vladimir
21.07.2017
16:23:32
так как в таком состоянии тебе еще придется отрабатывать зависимости между процессами и пр.

Vladislav
21.07.2017
16:23:38
как зачем? такое демон один

Google
Vladislav
21.07.2017
16:23:49
если все такие - действительно, зачем тогда systemd

Vladimir
21.07.2017
16:23:54
как зачем? такое демон один
ага, тока ты уже перепишешь к тому моменту весь функционал работы с процессами

с учетом зависимостей и пр.

вероятно умеющий парсить зависимости )

Vladislav
21.07.2017
16:24:17
не весь. и не полностью. чуть чуть костылей для одного конкретного

Vladimir
21.07.2017
16:24:32
не весь. и не полностью. чуть чуть костылей для одного конкретного
опять же, я предлагаю реализовать и обсудить )

на практике

тебе предлагаю

Vladislav
21.07.2017
16:24:39
ой всё, это бесконечная игра в "а теперь давай еще условие придумаю" )

Vladimir
21.07.2017
16:24:42
как автору идеи )

я тебе просто отвечаю на вопросы как реально работает системд

и какие косяки полезут и пункты будут нарушены если сделать тупой скрипт

Vladislav
21.07.2017
16:25:28
возьму какогонить демона на ненужной тачке с systemd, и попробую сделать, чтобы он жил при рестарте с битым конфигом

Vladimir
21.07.2017
16:25:47
если чо

Vladislav
21.07.2017
16:26:14
про внешние скрипты я изначально говорил

допюнит не особо нужен

Vladimir
21.07.2017
16:26:30
@themiron так вот, вторая проблема в системд с которой я столкнулся, что если у тебя есть демон и ты почему-то решил stdout писать в лог, то у тебя строки будут биться на 2048 байте

что очень хорошо когда у тебя там json :)

Google
Vladimir
21.07.2017
16:26:45
например

Vladimir
21.07.2017
16:27:04
явная бага
да, с 2014 года в багзилле

решения нет

Vladislav
21.07.2017
16:27:24
won't fix? )

Vladimir
21.07.2017
16:27:29
won't fix? )
нет, open

явная бага
я над хрычем издеваюсь, потому что копию баги завел через редхатовый платиновый саппорт

Vladislav
21.07.2017
16:27:55
как вариант - поправить самому и засабмитить в апстрим

Vladimir
21.07.2017
16:27:57
уже 4-ый месяц мне отвечают там )

я из спортивного интереса (чтоб троллить хрыча) не хочу

Vladislav
21.07.2017
16:28:37
:) как у вас все затейливо

Vladimir
21.07.2017
16:28:53
:) как у вас все затейливо
я опять же знаю воркэраунд (не писать в стдаут или стдерр)

Vladislav
21.07.2017
16:29:25
и раз уш пошла такая пьянка, то лично я бы пофиксил/изменил systemd под задачу, чем костылять костыли.

Vladimir
21.07.2017
16:29:50
Vladislav
21.07.2017
16:30:10
по сути, все, что нужно - PreStop с возмодностью сфейлиться

Vladimir
21.07.2017
16:30:32
по сути, все, что нужно - PreStop с возмодностью сфейлиться
оно в с остоянии "обсуждения" на багзилле

пока они не обсудят патч не примут

мм. куда? к себе где это реально нужно?
в системд патч не так просто пропихнуть

Vladislav
21.07.2017
16:31:34
trade off между - вести свое периодически синкаясь vs потратить время на оформление и отправку

Страница 1312 из 1317

Эта группа больше не существует Эта группа больше не существует