Как стать автором
Обновить

Мониторинг Supervisord: Упрощение контроля над процессами

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров3.7K
Всего голосов 4: ↑3 и ↓1+2
Комментарии23

Комментарии 23

Вещь нужная. Давно хотел свести панели управления supervisord от нескольких проектов вместе.

простите мне возможно дилетантский вопрос...

а кроме симпатичной вебморды есть какие-то весомые доводы использовать supervisord вместо нативных systemd сервисов которые решают те же задачи да ещё и имеют шикарный notify?

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

Supervisord написан на Python и, чаще всего, запускается всё равно через systemd. До середины 2019 года не было поддержки Python3. последний релиз был в конце 2022 года.

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

Разрешите ввязаться с вами в дискуссию. Я, честно признаюсь, сам предпочитаю systemd и немного недолюбливаю supervisor с давних времен. Не знаю как сейчас, но раньше глючен был.

Вот нашёл в википедии страницу с дистрибутивами, на которых systemd не ставится по умолчанию. Возможно, она не полная, конечно.. Но что из этого сейчас реально используется в каком-нибудь продакшене?

Ок, на каком-нибудь роутере, наверное, systemd нет. Но и Python туда ставить тоже смысла немного.

Ну не подходит скрипт на Python для контроля приложений на уровне OS. (я Python-разработчик, если что).

Дистрибутивы без systemd: Void, Gentoo(есть вариант без systemd), Artix, Alpine(на нем чаще всего докер image делают)

Соглашусь с вашим высказыванием с силу его глючности, она есть но незначительна - глюки зачастую сейчас есть с просмотром логов и их очисткой у выключенных процессов.

Есть альтернатива Python версии супервизора - его ремейк на Go( https://pkg.go.dev/github.com/couchbase/eventing/supervisor ) но мною он не был изучен пока ещё

Ну и ничто не мешает добавить его поддержку и (возможно) поддержку управления systemd процессами

Ок, Alpine - принимается, серьезный аргумент.

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

Systemd чаще используется для упровления системными службами(более низкоуровневый), а Supervisord докеризированными частями одного приложения - больше подходит в тех случаях когда приложение обновляется средствами непрерывной интеграции(CI)

больше подходит в тех случаях когда приложение обновляется средствами непрерывной интеграции

простите, но вот этого не понял, чем оно больше подходит то?

Supervisord может быть запущен не от рута

как и любой systemd сервис по желанию

а также работает на любых дистрибутивах, в том числе там где нет systemd

которые редко встречаются за пределами контейнеров и домашних извращений...

простите, но вот этого не понял, чем оно больше подходит то?

Проще конфиг написать, ну и systemd очень тяжел в текущей его форме для простых docker имаджей

Есть люди которые предпочитают использовать замену для systemd(и носят шапочки с фольгой, но всё же они есть) в своих дистрибутивах

Я к примеру использую Gentoo с OpenRC под капотом, без всяких systemd

Gentoo в продакшене? У вас там точно больше одного человека работает? Или это для пет-проектов?

Данный аргумен был в качестве примера систем без systemd.

systemd очень тяжел в текущей его форме для простых docker имаджей

я каким-то образом умудрился упустить выше по треду что разговор каким-то чудом переехал с нативной системы в контейнеры.. наверное на этом тред можно закрывать.

P.S.: я из тех отрицателей шапочек из фольги что даже генту используют с systemd, удобство и предсказуемость системы для меня важнее.

Ни разу не ставил Supervisord вне докер контейнера, поэтому аргументы против systemd у меня слабые

ни разу не использовал supervisord внутри докер контейнера так как считал(ю) что внутри контейнера в идеальный условиях должен быть один процесс, и сам докер "супервизит" его. а вот в легковесных lxc и chroot окружениях применять supervisord доводилось, но было это давно, теперь chroot в проде не применяется, а в lxc уже не приходится экономить пару мегобайт ОЗУ запуская его без init процесса.

А как у systemd с запуском N кол-ва процессов? Нагуглил какие-то костыли. Нет такого, что файлик скопировал в контейнер и кайфуешь. Без ручного старта systemd никак, если речь о нескольких экземплярах процесса. Это самое красивое решение из того, что я нашел:

[Service]

ExecStart=/bin/sleep 600 %I

[Install]

WantedBy=multi-user.target


# systemctl start test@{1..30}.service

Сам мечтаю избавиться от supervisor, заодно образ похудеет без питона.

есть какие-то весомые доводы использовать supervisord вместо нативных systemd сервисов которые решают те же задачи

Ну городить systemd обвязку для какого нить условного скрипта на nodejs/python/php с контролем его работы это лютый оверхед как по мне.

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

нуууу... я даже не знаю что сказать.

А systemd умеет перенаправлять stdout/stderr в соответствующие логи? Напомню - условный скрипт не умеет ничего списать в логи сам, ему и не надо.
Понятно, что в systemd в данный момент много перекрывающего с supervisord, но он и вышел когда никакого systemd не было

Отлично. Не особо разбирался в таких фичах, ибо исторически какие-то вещи работали и работают в супервайзоре когда systemd даже в планах не было

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории