
Vladimir
21.07.2017
15:45:53
и системд нужно будет натравить на этот пид
если демон и пид не пишет то релоад сделать нельзя будет

Vladislav
21.07.2017
15:46:59
если демон пид не пишет, тоже не проблема, с однострочной оберткой на баше

Vladimir
21.07.2017
15:47:23
или авторы могли бы сделать PreStop action

Google

Vladimir
21.07.2017
15:47:56
и они должны быть разные
тогда ты должен будешь пожертвовать одним из двух вещей

Vladislav
21.07.2017
15:48:44
тут не в курсе. разные - всмысле отличаться строками в сервис файле?

Vladimir
21.07.2017
15:48:57

Vladislav
21.07.2017
15:49:14
а. логически

Vladimir
21.07.2017
15:49:18
тебе нужно чтобы рестарт не убивал демон если новая версия не будет работать с этим конфигом
но в системд ты не можешь
тебе нужно что-то внешнее что проверит можно ли делать рестарт

Vladislav
21.07.2017
15:49:57
а дальше его ревертить какнибудь, если не удалось рестартнуться

Vladimir
21.07.2017
15:50:24
ну бывает когда он катится на 100 ролей

Google

Vladislav
21.07.2017
15:50:34
onFailure есть же

Vladimir
21.07.2017
15:50:46

Vladislav
21.07.2017
15:51:07
пакет явно нет :)

Vladimir
21.07.2017
15:51:24
@themiron ну я предлагаю тебе просто реализовать такой функционал для демона
и потом показать решение которое работает

Vladislav
21.07.2017
15:51:34
думаю, костылями и палками, при условии константности пакета, можно то, что ты хочешь сделать
PreStart конечно был бы полезен тут

Vladimir
21.07.2017
15:51:57

Vladislav
21.07.2017
15:52:22

Vladimir
21.07.2017
15:52:42
а главное работают предсказуемо
ExecStartPre, ExecStartPost, ExecStopPost

Vladislav
21.07.2017
15:54:36
ну, собственно тогда никто не запретит
ExecStartPre=/path/to/bicycle.sh
prestart
ExecStart=/path/to/bicycle.sh start
...
и там любой велосипедизм

Vladimir
21.07.2017
15:55:04
@themiron мы начинаем уже по третьему кругу одно и то же мусолить

Vladislav
21.07.2017
15:55:29
ладно. я не вник в тему, ок

Vladimir
21.07.2017
15:55:30
я настойчиво предлагаю реализовать юнит который делает описанный мною кейс

Google

Vladimir
21.07.2017
15:56:15
@themiron 'systemctl restart' делает строго ExecStop -> ExecStopPost -> ExecStartPre -> ExecStart -> ExecStartPost
всегда
это не меняется
ExecStop если не отработал за таймаут - шлет SIGKILL
вопрос - как в таких условиях сделать так чтобы рестарт фейлился если конфиг битый?
релоад трогать нельзя, он уже заюзан

Vladislav
21.07.2017
15:57:57
ок, велосипед - пусть шлет отдельному pid-у вне группы, который будет проверяться вачдогом и перезапускаться. сам это фейковый демон будет дальше контролировать, валидный ли конфиг или нет, со всеми вытекающими

Vladimir
21.07.2017
15:58:16

Vladislav
21.07.2017
15:58:22
ага

Vladimir
21.07.2017
15:58:34
тут вот даже решение с чеком через папет элегантнее

Evgeny
21.07.2017
15:59:21
Вакансия: специалист техподдержки пользователей в международную компанию.
Место: СПб, офис в 50 метрах от метро «Обводный канал».
Требования: знания на уровне молодого Windows администратора (классика: AD, DNS и т. п.); Английский (хотя бы мало-мало разговорный, т.к. иногда говорить придется).
ЗП: со всеми бонусами в районе 60
График: Пятидневка с 9 до 18 (на самом деле до 17)
Подробности по ссылке https://spb.hh.ru/vacancy/21688425 . Если нужна ещё какая-то информация, можно спросить всё что интересно у @hitriy

Vladimir
21.07.2017
15:59:21
и при этом инит в этом плане элегантнее и лучше

Evgeny
21.07.2017
15:59:33
Мы тоже ищем хорошего коллегу

Vladislav
21.07.2017
16:00:19
еще вариант - по стопу запускать с некоторым таймаутом внутренний рестарт, тем же скриптом. далее в престарте чекать конфиг и гасить таймер рестарта, если всё плохо, возвращая ошибку
т.е рестарт сфейлится, сервис как работал так и будет работать

Vladimir
21.07.2017
16:01:35
таймаут задается в юните
пока он не сработает или все пиды не сдохнут, системд не перейдет к StartPre

Vladislav
21.07.2017
16:02:18
пид не проблема, PIDFile есть

Vladimir
21.07.2017
16:02:25

Google

Vladimir
21.07.2017
16:02:30
а мы хотели этого избежать
рестарт так и так сфейлится так как старт не отработает или престарт
но демон сдохнет
задача же в том чтобы если демон не сможет сделать старт его не стопать

Vladislav
21.07.2017
16:03:06
в туда можно записать левый пид, или просто с Type пошаманить, пид не потребуется (тут не уверен)

Vladimir
21.07.2017
16:03:21
системд при запуске демона зафигачит в цгруппу
и все дети его будут в этой группе

Vladislav
21.07.2017
16:03:39
да с чего группа то умрет, если они с пидом не связана?
откуда systemd знать о группе

Vladimir
21.07.2017
16:03:48

Vladislav
21.07.2017
16:03:54
всем процессам? )

Vladimir
21.07.2017
16:04:00
@themiron всем процессам группы

dk
21.07.2017
16:04:08
Системд - самыйлучий

Vladislav
21.07.2017
16:04:12
группа определяется по главному пиду
если он левый, то и группа мимо

Vladimir
21.07.2017
16:04:25
ну и в таком случаи ты получишь то же поведение как отключение отправки килла

Vladislav
21.07.2017
16:04:39
насколько я знаю - точно да (про posix kill)

Google

Vladimir
21.07.2017
16:04:51
системд перестанет контролировать демон
значит статус не будет работать

Vladislav
21.07.2017
16:05:00

Vladimir
21.07.2017
16:05:06
значит он будет его пытаться оживить
@themiron это еще больший пиздец чем с фейковым демоном
потому что фактически тебе придется сделать еще больше работы
чтобы оно работало

Vladislav
21.07.2017
16:06:28
поведение рестрата контролируется с помощью Restart, в т.ч. по таймауту
пид в этом случае не нужен

Vladimir
21.07.2017
16:07:11
если заработает твой велосипед

Vladislav
21.07.2017
16:08:05
давай проверим исходные.
есть демон, который в случае кривого нового конфига должен при рестарте остаться рабочим, а сам рестарт - сфейлится. все верно?

Vladimir
21.07.2017
16:08:27
когда он работает
то есть когда ты все починил restart должен отработать нормально как и планировалось

Vladislav
21.07.2017
16:08:45
то есть, по статусу должен считать что все ок

Vladimir
21.07.2017
16:08:47
то есть убить старый и запустить новый

Vladislav
21.07.2017
16:09:18
мм. а как нужно по условиям задачи то?

Vladimir
21.07.2017
16:09:34
Эта группа больше не существует