LINUX.ORG.RU
Ответ на: комментарий от CrX

Я тоже не смог осилить написать пример на s6.

для systemd ещё сложнее

Выше я написал.

until printf «» 2>>/dev/null >>/dev/tcp/foo.socket; do sleep 1; done; foo-service

А как это работает, кто создал /dev/tcp, /dev/tcp/foo.socket? Если юнитов десятки, то будут десятки циклов висеть в процессах?

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 3)
Ответ на: комментарий от MOPKOBKA

Выше я написал.

Возьми с полки пирожок.

А как это работает, кто создал /dev/tcp, /dev/tcp/foo.socket?

Да ё моё, дайте КОНКРЕТНУЮ задачу. В твоём примере я тоже не понимаю, как это работает.

Если задача «сделать так же, как это работает в systemd», то я для этого мне придётся разобраться, как это работает в systemd. А я не знаю, я никогда юнитов с активацией по сокету для него не писал, и знать не знаю, как именно она работает, и кто там их создаёт, или они должны быть заранее созданы.

Если юнитов десятки, то будут десятки циклов висеть в процессах?

Да, будут. Но мне сложно представить такое «если». И один-то такой, где это нужно, найти бы, а тут десятки… Но если их десятки — да, будет десяток процессов, которые ничего не делают. Никаких проблем в этом нет.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 1)
Ответ на: комментарий от CrX

Да ё моё, дайте КОНКРЕТНУЮ задачу. В твоём примере я тоже не понимаю, как это работает.

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

Да, будут. Но мне сложно представить такое «если». И один-то такой, где это нужно, найти бы, а тут десятки… Но если их десятки — да, будет десяток процессов, которые ничего не делают. Никаких проблем в этом нет.

Я подумал что может быть удобно мне, например начал работать, весь LAMP поднялся, закончил, по таймеру от бездействия само все остановилось, не надо каждое утро делать systemctl start и каждый вечер systemctl stop.

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

ок, понял. Не ожидал, что нам ещё и создать сокет надо, а не наоборот… Нет, я не знаю, как именно это реализовать по ранее предложенному принципу с циклом. И мне лень разбираться в том, что мне никогда не требовалось и, надеюсь, никогда не потребуется. Так что сдаюсь, не напишу.

Тут не очень понятно, нафига оно в таком виде вообще, если не кто-то другой и не сам демон сокет создаёт, а инит, причём для конкретно демона, но при этом должен уметь с таким типом активации работать и из этого сокета читать. Почему просто не запустить демон, чтоб он себе создал сокет какой нужно, а когда прилетели данные, не развернул весь процесс, почему это надо было вынести в инит?…… Хотя кажется, я начинаю понимать: docker — это же продукт RedHat тоже. Не удивительно, что они свой же docker решили завязать на свой же systemd.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

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

Это означает что в программе которая «туда подключается» должен быть либо реализован какой-то костыль для передачи дескриптора уже открытого и законнекченного сокета из системде в программу, либо, как минимум использование stdin/stdout вместо сетевого сокета, как это было сделано в inetd со всеми вытекающими (отдельный процесс на каждый коннект, например).

Т.е. произвольную сетевую софтину, которая специально не заточена под костыли системде просто не получится «активировать по сокету» используя системде. :) Офигительно полезная фича, да…

Stanson ★★★★★
()
Последнее исправление: Stanson (всего исправлений: 1)
Ответ на: комментарий от CrX

Хотя кажется, я начинаю понимать: docker — это же продукт RedHat тоже. Не удивительно, что они свой же docker решили завязать на свой же systemd.

А когда он успел им стать? Я чего то не знаю? Разве у них не podman?

Почему просто не запустить демон, чтоб он себе создал сокет какой нужно, а когда прилетели данные, не развернул весь процесс, почему это надо было вынести в инит?

И к каждой программе такого демона дописывать?

MOPKOBKA ★★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

А когда он успел им стать? Я чего то не знаю? Разве у них не podman?

Да, действительно не их, но они вроде как участвуют.

September 19, 2013: Red Hat and Docker announced a collaboration around Fedora, Red Hat Enterprise Linux (RHEL), and OpenShift.

И к каждой программе такого демона дописывать?

Зачем? Демон же уже есть, по условию задачи, ради него всё и делается. Ему просто можно висеть в виде очень маленького кусочка, который слушает сокет, а потом догружает остальное, когда надо.

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от MOPKOBKA

Смотри - есть например софтина, которая умеет открыть TCP сокет типа 0.0.0.0:12345 и делать accept запуская треды для этих соединений и делая разное в зависимости от того какой remote адрес, во что он обратно резолвится, есть ли в DNS для этого домена запись специальная и что в ней и т.п.

Как твой systemd-socket-proxyd поможет сокетно активировать эту софтину? Или ты предлагаешь запускать софтину на 127.0.0.0:54321 и поломать к едрене фене всю логику работы софтины своей проксей? :)

Stanson ★★★★★
()

В systemd написать сервис активируемый по сокету проще. Форк процесса с использованием systemd с последующим ожиданием чем-то существенно отличается от runit? А такое в systemd тоже делают. Кто должен создать сокет? Runit, init тоже умеет запускать сервис по сокету, это не ново.

wonit
() автор топика
Ответ на: комментарий от CrX

Вот это, кстати:

если что-то где-то происходит, то легко понять, что и где. В общем, основное достоинство — простота (при полноценном выполнении возложенной задачи).

Про systemd

her_s_gory
()
Ответ на: комментарий от CrX

Можно просто сделать скрипт-обёртку docker, которая будет запускать докер, если он не запущен, и выполнять команду, а если уже запущен — просто выполнять команду. Не нужно городить сложности вокруг простых вещей.

Что может быть проще docker ps?

her_s_gory
()
Ответ на: комментарий от CrX

оторая длиннее по объёму, чем скрипт (не для sysv, там правда ужас был), которую при этом сложнее написать и сложнее прочитать.

  [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network.target docker.socket
    Requires=docker.socket

    [Service]
    Type=notify
    ExecStart=/usr/bin/docker daemon -H fd://
    LimitNOFILE=1048576
    LimitNPROC=1048576

    [Install]
    Also=docker.socket

¯_(ツ)_/¯

her_s_gory
()
Ответ на: комментарий от vbr

Вот как в руните сделать ежедневный таймер с логгированием и ротацией логов?

Проблема в том, что это не должно быть задачей init. А так вагон вариантов с syslog, logrotate, cron.

В системд все из коробки работает.

Комбайн...

AS ★★★★★
()
Ответ на: комментарий от AS

Как-то все забыли, что systemd принес ПАРАЛЛЕЛЬНУЮ загрузку сервисов, что весьма даже ощутимо сократило время начального старта системы. в sys-v и runet, как мне помниться, загружают сервисы ПОСЛЕДОВАТЕЛЬНО, что сильно больше по времени, не говоря, что в разных конкретных инсталяциях Linux, даже одного дистрибутива, могут быть установлены разные сервисы, и соответственно, заранее крайне затруднительно определить порядок запуска. В массовом обслуживании, затруднительно приставит к каждому компу по квалифицированному админу.

Как ни странно, systemd - во многом снимает эти очень больные для эксплуатанционщиков вопросы.

Плюс стандартизация/унификация процессов запуска системы, облегчает жизнь разработчиков сервисов, ибо им не нужно разбираться с нюансами запуска на каком-либо «экзотическом» дистрибутиве…

Так что это все, с моей точки зрения, и позволило systemd - стать лидером - с ним в эксплуатации получается банально дешевле…

tsvbrest
()
Ответ на: комментарий от CrX

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

Shadow ★★★★★
()
Ответ на: комментарий от tsvbrest

в sys-v и runet, как мне помниться, загружают сервисы ПОСЛЕДОВАТЕЛЬНО, что сильно больше по времени, не говоря, что в разных конкретных инсталяциях Linux, даже одного дистрибутива

Параллельно они грузятся в runit. Тут скорее наоборот в systemd фишка в том, что он позволяет последовательно (After, Before) в определённом порядке, а в простых это не фича самого инита, а нужно сделать проверку на запущенность другого демона, если твой от него зависит.

что сильно больше по времени, не говоря, что в разных конкретных инсталяциях Linux

Одинаково оно, даже было. Но SSD убрал все остатки разницы между тем, как грузить «сервисы». Вне зависимости от инита, грзятся они обычно 3–7 секунд, в зависимости от количества и сложности, а основное время занимает ожидание монтирования носителей и подключения к сети (ещё столько же, если не больше).

CrX ★★★★★
()
Последнее исправление: CrX (всего исправлений: 2)
Ответ на: комментарий от tsvbrest

Как ни странно, systemd - во многом снимает эти очень больные для эксплуатанционщиков вопросы.

Начать с того, что это в принципе вопрос, который не стоит выеденного яйца. В нормальной десктопной системе аптайм измеряется десятками дней. Если это ноут (ибо гибернация) или сервер, то это могут быть сотни, или, даже, тысячи дней. И кому тут важна скорость первичного старта ОС?

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

Плюс стандартизация/унификация процессов запуска системы, облегчает жизнь разработчиков сервисов, ибо им не нужно разбираться с нюансами запуска на каком-либо «экзотическом» дистрибутиве…

Ага. И за качеством кода следить не надо: грохнулся сервис, так systemd понимет. Делов-то.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от vbr

В systemd все эти строчки внесены в систему, написаны на хорошо оттестированном и быстром C, а сервис это просто конфигурация, т.к. по сути они все одинаковые.

Вот если бы системд на этом и остановился – цены бы ему не было. Вместо этого он решил заместить собой все на свете и вместо инита с конфигами мы в нагрузку получаем еще и свое виденье подсистемы логов и свое виденье крона и бог знает что там еще. И теперь ему все должны.

pihter ★★★★★
()
Ответ на: комментарий от vbr

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

А еще винда есть, раз уж такой разговор

pihter ★★★★★
()
Ответ на: комментарий от vbr

Я пишу софт, я один раз пишу systemd файлы для него и он работает на любом дистрибутиве

Нет. Ибо systemd всё ещё не зохавал мир. :-) И когда от systemd откажутся, твой софт помрёт вместе с ним. Кстати, а как с портированием в ОС, отличные от Linux, у этого софта?

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 2)
Ответ на: комментарий от pihter

а где ж ваше чувство свободы творить и делать что является основой опенсорц. ??
и то, что патчами можно исключить части системы ?? :) или сделать свое на основе опенсорц-чужого :)

pfg ★★★★★
()
Ответ на: комментарий от wonit

Это до тех пор, пока то, что вы используете в systemd, не прибьют гвоздями к cgroups2. Околодофига софта, который дропнул поддержку не systemd решений, оказался опосредованно завязан на cgroups2. Которые даже не во всяком linux есть.

Shadow ★★★★★
()
Последнее исправление: Shadow (всего исправлений: 1)
Ответ на: комментарий от cobold

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

Мде, развиватель. И что же ты, развиватель, пишешь в пускалках? Ах, тебе крона не хватает! Для развития ТВОЕГО приложения! Ну давай, РАЗВЕЙ мысль, что ты там пишешь такого, от ротации, времени луны (и системы) зависящее!

Eulenspiegel
()

Потому что runit это BSD-init на стероидах, а systemd — полноценный системный менеджер. На системе общего назначения systemd предпочтительней

hateWin ★☆
()
Ответ на: комментарий от tsvbrest

runet, как мне помниться, загружают сервисы ПОСЛЕДОВАТЕЛЬНО

https://smarden.org/runit/benefits

Fast system boot up and shutdown

After the system’s one time tasks (stage 1) are done, the system services are started up in parallel. The operating system’s process scheduler takes care of having the services available as soon as possible.

dataman ★★★★★
()
Ответ на: комментарий от Stanson

https://www.freedesktop.org/software/systemd/man/latest/systemd.socket.html

Note that the daemon software configured for socket activation with socket units needs to be able to accept sockets from systemd, either via systemd’s native socket passing interface (see sd_listen_fds(3) for details about the precise protocol used and the order in which the file descriptors are passed) or via traditional inetd(8)-style socket passing (i.e. sockets passed in via standard input and output, using StandardInput=socket in the service file).

Внимание, вопрос: где в приведенном примере упоминаются костыли? Или хейтеры, как обычно, несут чушь, не читая документацию?

hateWin ★☆
()
Последнее исправление: hateWin (всего исправлений: 1)
Ответ на: комментарий от Eulenspiegel

Эта шняга где-нибудь кроме GuixSD есть? Потому что Guix – тоже тот ещё раковник.

Раковник это Nix в отличии…

Nix отлично работает. А вот с Guix постоянно проблемы.

Плюс, Guix страдает от типичных проблем всех гнутых клонов: чуваки делают новую штуку которая уже как существующая, но ещё БОЛЕЕ ШВАБОДНАЯ, а потом оказывается, что она никому нахрен не всралась. Так было с Hurd, так было с вагоном другого гнутого софта, и вот тут ещё с Guix. По сути ведь основное отличие Guix от Nix даже не в язычке, а в том, что GuixSD не содержит злобной проприетарщины.

hateyoufeel ★★★★★
()