Comments 25
"Systemd - комплексная, глубоко интегрированная система инициализации и управления, которая..." превращает управление сервером в общение с "черным ящиком".
Для домохозяек с десктопом - самое то. Но сервер... Я на 100% должен контролировать его состояние, а не кланятся systrmd с просьбой сказать мне, зачем он 100 раз перегрузил упавший демон, а потом "ой, всё". Бездумно перегружать, надеясь, что все чудесным образом исправится - это подход Microsoft... ИМХО.
Мой выбор - Devuan
Бездумно перегружать, надеясь, что все чудесным образом исправится - это подход Microsoft... ИМХО.
1) У MS это настраивается, один, два или более раз рестартануть нужно/можно. )
MS way

2) Если бы только их..., как работают контейнеры в K8S вы наверняка знаете?
А что в контейнерах-то особо сложного? Сами контейнеры - это сахар над cgroups, namespaces и capabilities (и ещё парой плюшек безопасности в Linux). Машинерия сложная, но в целом мне понятная. А ведь даже не админ)
Т.е. там Вас подход "навернулось - пересоздай" не смущает?
Почти)
Навернулось -> залогировал -> отправил уведомление -> пересоздал.
Вот так прям хорошо.
Мой опыт работы в HFT говорит, что можно торговать миллиардами с таким подходом :)
Навернулось -> залогировал -> отправил уведомление -> пересоздал.
Вот так прям хорошо
Можно подумать, что эти уведомления хоть кто-то читает. Поубивал бы за такой подход, ставший повсеместным. Бардак и полный пофигизм.
Если бы все хардкорные программисты (да-да, плюсовики-линуксоиды) всегда нормально делали обработку ошибок, то и не было бы ситуаций "не работает, почему - неизвестно, перезагрузил - заработало". Так что не в ту сторону воюете.
Попробуйте эту же мысль высказать фанатикам микросервисов )
Холивар будет обеспечен ))
Адекватные промолчат, вайб-кодеры засыпят фразами про stateless и "а чо такова?"
Почему бы не пойти дальше и сразу код без багов уже начать писать)
Так код без багов не спасёт. Представьте: две какие-то утилиты несовместимые стоят и пытаются сделать одно и то же разными способами. Бага ни в одной из них нет и каждая по отдельности работает правильно, но вот только вместе их нельзя использовать.
Но ведь это самый обычный race condition и в каждой утилите есть баг. Изменяемый ресурс надо блокировать на запись или использовать транзакции.
Муж и жена хотят отвезти ребёнка в школу, каждый думает, что поедут на его/её машине. Жена первая берёт за руку ребёнка, выводит и садит в свою машину. Муж ждёт. Жена отпускает ребёнка, муж его берёт за руку и начинает вытаскивать из машины жены, чтобы посадить в свою. Вроде с общим ресурсом правильно обращаются (не тянут одновременно за руки в разные стороны), но всё равно что-то не то...
Аналогии ничего не доказывают
Аналогии в данном случае и не нужны. Тот же пример можно построить на любых объектах в ОС/БД и на каждый такой объект найдется своя лочка
и на каждый такой объект найдется своя лочка
Вы в этом уверены? Что каждый объект всегда можно без негативных последствий заблокировать на любое нужное для правильной работы время?
Конечно уверен) При отсутствии конкуренции за ресурсы - все эти лочки почти ничего не стоят.
При наличии конкуренции за ресурсы - все эти лочки - необходимое зло и работает оно только в том случае, если корректно обеспечена синхронизация.
Без синхронизации система в принципе не работает, а значит добавление лочек не создаёт никакого влияния на работающую систему.
Бездумно перегружать, надеясь, что все чудесным образом исправится
Поставьте вместо Restart=on-failuer
- Restart=no
и все проблемы с "бесконтрольной" перезагрузкой уйдут)
А вот как раз на серверах Systemd работает отлично за счёт точного управления зависимостями, изоляции через cgroup и тд.
Я на 100% должен контролировать его состояние
Иными словами, если демон упал - поднимать его вы будете строго вручную? Это полностью противоположно современным требованиям к серверам (да и не только современным).
Disable лишь убирает симлинки, но сервис все еще можно запустить вручную через start.
Запуск вручную не так страшен, в конце концов можно просто не запускать вручную. Гораздо важнее что mask не даёт юниту запускаться даже если он напрямую указан в зависимостях другого юнита.
Есть ещё полезная опция ConditionFileIsExecutable=
- на случай, если пакет с выполняемым файлом был удалён, но конфиги systemd остались.
Systemd: полное руководство для админов + примеры