The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

В sysvinit добавлена утилита для преобразования unit-файлов ..., opennews (??), 18-Ноя-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


93. "В sysvinit добавлена утилита для преобразования unit-файлов ..."  +/
Сообщение от Аноним (93), 18-Ноя-19, 13:32 
А как она тогда будет обрабатывать прописанные в юнитах события завершения процессов¹? В отрыве от системы инициализации это сделать невозможно. Sysvinit, кстати, это поддерживает, но для задействования этой его фичи надо прописывать запуск демонов не сбоку бантиками через костыли на шелл-скриптах, а напрямую в inittab, что по ряду причин затруднительно.

____

¹ https://www.freedesktop.org/software/systemd/man/systemd.ser...

Ответить | Правка | Наверх | Cообщить модератору

99. "В sysvinit добавлена утилита для преобразования unit-файлов ..."  +/
Сообщение от U.N.Owen (?), 18-Ноя-19, 14:09 
>как обрабатывать прописанные в юнитах события завершения процессов?

Ну первое, что приходит в голову — тупо следить за файлами внутри /sys/fs/cgroup/что-то. Это при том, что я в этих cgroup и их работе, вообще-то, не разбираюсь от слова совсем. Наверняка там есть и более другие способы определить, что процесс, запущенный внутри группы, завершился.

Ответить | Правка | Наверх | Cообщить модератору

156. "В sysvinit добавлена утилита для преобразования unit-файлов ..."  –1 +/
Сообщение от Аноним (93), 19-Ноя-19, 03:57 
> следить за файлами внутри /sys/fs/cgroup/что-то

Т.е. это будет не просто что-то там конфигурирующая и запускающая утилита, а отдельный демон.
> есть и более другие способы определить, что процесс, запущенный внутри группы, завершился.

Самый простой и прямой способ — быть родительским процессом запускаемого процесса и обрабатывать SIGCHLD. Именно на этом месте стоит демон системы инициализации, он получает сигналы от завершения демонов и как-то на них реагирует. В случае с sysvinit'ом в современных ОС эта фича свелась к перезапуску getty, к сожалению, а наблюдение за другими демонами стали делать на костылях и велосипедах.

Ответить | Правка | Наверх | Cообщить модератору

176. "В sysvinit добавлена утилита для преобразования unit-файлов ..."  +/
Сообщение от U.N.Owen (?), 20-Ноя-19, 15:11 
>Т.е. это будет не просто что-то там конфигурирующая и запускающая утилита, а отдельный демон.

Это будет конфигурирующая и запускающая утилита И несколько отдельных (в том числе от этой утилиты) демонов. Каждый из который должен быть вполне способен работать и без неё.

Очевидно, что для поддержки разных типов юнитов потребуются разные демоны. Причем в большинстве случаев они уже существуют. Скажем, для .socket — это inetd, для .timer — старый добрый cron/anacron. В ряде случаев для поддержки всего функционала юнитов потребуются дополнительные переходники/обертки. Скажем, тот же cron не поддерживает опции вроде RandomizedDelaySec, значит придется запускать не саму утилиту, а переходник, который этот random обеспечит (или возможно, не запускать, а держать в виде отдельного минидемона — это уже детали).

Ну а для юнитов типа .service, да, очевидно, что для поддержки всего их функционала сервис должен запускаться не напрямую, а через некоторый демон-супервизор, обеспечивающий его запуск в контейнере. Видимо, контейнером будет cgroup, но если есть вменяемые альтернативы — никто не мешает использовать их.

Но очевидно, что этот супервизор должен запускаться только запуском и контролем других демонов. И однозначно НЕ должен заниматься инициализацией системы, монтированием файловых систем, поддержкой таймеров, сети, авторизации пользователей, приготовлением кофе и прочей не имеющей отношения к делу хренью.

Ответить | Правка | Наверх | Cообщить модератору

185. "В sysvinit добавлена утилита для преобразования unit-файлов ..."  –1 +/
Сообщение от Аноним (93), 21-Ноя-19, 17:54 
> для .socket — это inetd

Здесь есть две проблемы. Во первых, у inetd другой алгоритм работы: он держит слушающий сокет у себя, а сервер (не являющийся демоном) запускает для каждого соединения отдельный; systemd же при первом соединении передаёт слушающий сокет демону и до завершения демона его не трогает. Во вторых, в случае с systemd демон запускается со всем набором фич изоляции и ограничения ресурсов (например, он может вообще не иметь доступа в сеть кроме упомянутого сокета, либо быть воткнутым в неймспейсы другого демона) — т.е. сокет надо будет как-то передать упомянутому далее супервайзору, в возможности чего я сомневаюсь.

> для .timer — старый добрый cron/anacron.

А что делать, когда активация таймера привязана к запуску или остановке других юнитов? Тут нужен демон динамических относительных таймеров, что в задумку крона не очень-то влазит.

> некоторый демон-супервизор

Так это и есть init: он знает все процессы, в т.ч. к какому ранлевелу какой принадлежит.

> И однозначно НЕ должен заниматься инициализацией системы

Init не занимается инициализацией системы, он лишь обрабатывает события, согласно которым переключает runlevel'ы, киляя при этом оставшиеся от старых ранлевелов процессы. Инициализацией системы занимается то, что на эти ранлевелы развешено.

Ответить | Правка | Наверх | Cообщить модератору

187. "В sysvinit добавлена утилита для преобразования unit-файлов ..."  +/
Сообщение от U.N.Owen (?), 23-Ноя-19, 20:57 
> Во первых, у inetd другой алгоритм работы

Ну, даже если inetd или его аналоги приспособить к делу не удастся, написать демона, который слушает порты, которые скажут, и при любой активности на них — передаёт управление, куда следует — не такая уж сложная задача.

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

А что мешает добавить/убрать новое задание? Мне кажется, это вполне можно сделать и налету.

>> некоторый демон-супервизор
> Так это и есть init: он знает все процессы, в т.ч. к
> какому ранлевелу какой принадлежит.

Такой супервизер не обязан вообще что-то знать о ранлевелах и всех запущенных процессах. Он должен знать о тех процессах, которые под его управлением. И только.
А задача инита — запустить помянутый выше конфигуратор (на каждом ранлевеле — со своим .target, от которого начинается цепочка), который, в свою  очередь, обеспечит запуск этого супервизера в тех случаях, когда это действительно нужно.

И sysvinit, как и, полагаю, любой другой существующий инит, с такой задачей вполне справится.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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