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
Эта группа больше не существует