Incognito
Max
Ребят. Помогите решить проблему. Имеется контейнер, который хочет graceful shutdown. Просто ловить SIGTERM он не умеет, поэтому я поставил preStop hook: echo exit > /proc/1/fd/0. Но есть проблемка, если я включаю tty: true и stdin: true, то в STDIN процесса из контейнера писать невозможно. В контейнере один процесс и у него pid 1.
Max
Может есть какой-то другой способ послать сообщение в STDIN процесса у контейнера с tty?
Max
из самого контейнера
Rainbow
tini использовать как entrypoint? или я не так понял graceful
Max
tini использовать как entrypoint? или я не так понял graceful
В общем-то правильно понял, но приложение само по себе не умеет правильно падать при SIGTERM, только если послать команду "exit" в STDIN
Max
а эта штука не может из fifo читать, а не из tty?
Не знаю что такое fifo( а как попробовать?
Andor
перенаправлением вывода в инит-скрипте твоего контейнера
Andor
вот и выросло поколение не знающее что такое fifo
Etki
mkfifo?
Andor
mkfifo и потом заставить приложение читать stdin из него
Andor
если оно сумеет - будет легко ему вписать чо хочешь
Max
mkfifo fifo && cat fifo | program
Max
так?
Andor
типа того
Max
если оно сумеет - будет легко ему вписать чо хочешь
а сможет ли в таком случае куб делать attach с -ti?
Andor
хз
Andor
я вообще не знал что куб умеет attach
George
Ну, ты коммитишься на то, что у тебя несколько сервисов внутри контейнера
Etki
аттач это подрубиться прям в существующий stdin?
George
Как бы неясно в какой слать стдин
Max
аттач это подрубиться прям в существующий stdin?
я не знаю как оно работает, это докеровский функционал вроде)
Max
а куб его дергает
Etki
короче, обычный exec не поможет?
Etki
тем более что ты все равно через него в fifo сможешь напихать
Etki
неудобно - это то, что я чувствую, когда обсуждаю такие костыли
Etki
динамически подключаться и отправлять туда что-то - да, так себе идея
Max
Если у вас нет такой надобности то я чрезмерно рад за вас
Etki
я вообще хорошо живу
Andor
ты так защищаешь этот костыль как будто ты сам это приложение написал
Andor
а что за приложение-то?
Andor
если не секрет
Max
а что за приложение-то?
legacy Игровой сервер)
Andor
название
Max
csgo
Etki
ого, в кубенях-то
Max
ого, в кубенях-то
Да тут скорее вопросы про особенности работы докера а не куба
Andor
а зачем ему graceful shutdown?
Max
а зачем ему graceful shutdown?
Чтобы игроки не зависли а получили уведомление о том что сервер выключен
Max
Ну и самому серверу нужно кое-какие скрипты выполнить перед тем как он выключится
Etki
Да тут скорее вопросы про особенности работы докера а не куба
ну я скорее про то что его просто так не выключишь, надо подождать, пока у школоты матч закончится
Andor
а, а так они зависнут?
Andor
этого я не знал
Max
и будут ждать таймаута
Max
То есть слать команды на смену карты, кик/бан и прочие.
Etki
жирный столько денег на шмотках заработал, а нормальный сервер написать пожадничал
Max
Ну, имеем то что имеем)
Andor
а эта хрень не умеет из сокета читать?
Andor
хотя вряд ли
Andor
ну в худшем случае можно на перле написать 10 строк скрипт, который будет превращать сокет в stdin и обратно
Andor
ну или на любом любимом языке
Andor
я чота сомневаюсь что это будет нормально работать
Etki
потому что ты теряешь возможность послать тот хук
Max
я чота сомневаюсь что это будет нормально работать
Это нормально работало пока не понадобилось сделать graceful shutdown
Andor
socat tcp-listen:50505,reuseaddr exec:<your-command>
Etki
csgo (извините)
George
Я привел пример
George
Куча процессов в одном контейнере.
George
Куда писать будешь (как выбирать)?
Max
Куча процессов в одном контейнере.
У нас один процесс в каждом контейнере
Etki
Аргументы?
лишний уровень контроля, просто так не поработать с сервисом (пушо все должно быть экспоузнуто по сети)
Max
Ага, и костыль
Какой костыль?
George
Какой костыль?
Для перехвата сигнала