|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Мне цикл не нравится в моей программе службе без ГУИ ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 11:37 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp rdb_dev Даже не знаю кому может понадобиться служба с пустым циклом, внутри которого ничего кроме загрузки процессора не происходит... Если это какой-то TCP сервер, то в цикле, к примеру, может находится опрос сокетов - какая-то полезная нагрузка, отвечающая решаемым службой задачам. Логично? Как без цикла? Службы, как правило, обрабатывают приходящие им сигналы. Часть сигналов можно отправить на свой "автоматический" обработчик - handler, который отрабатывает по callback'у, а часть обрабатывать "вручную" - в цикле основного потока, для чего в этом цикле вешается sigwait(), результатом которого является номер обрабатываемого вручную сигнала. К примеру, ты можешь указать, что хочешь обрабатывать сигналы SIGHUP, SIGTERM, SIGQUIT данным способом и тогда, при появлении этих сигналов, sigwait() будет вываливаться с результатом signo. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 11:38 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Ты все рассказал про обработку сигналов unix системных. Мне они не нужны. Более высокий уровень. Прикладной код. Класс подписывается и будет вызвана функция по каллбэку или адресу. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 11:47 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, а как на счёт штатного завершения твоей службы при получении сигнала от systemctl restart my.service ? Непредусмотрено? Просто киляем процесс и всё? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 11:53 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Это позже. Это рюшечки. Счас идеальнобыло бы спящий процесс без цикла и он пробудился по какому либо признаку. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 11:56 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Еще хорошо бы при поступлении message показать его в systree. Но тоже позже. Не уверен что это нужно в этом же процессе фоновом демона. Пока можно в логах смотреть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 11:59 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, То есть модель желательно такая - не демон опрашивает, а демон подписывается на.... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:02 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev PetroNotC Sharp, а как на счёт штатного завершения твоей службы при получении сигнала от systemctl restart my.service ? Непредусмотрено? Просто киляем процесс и всё? И старт стоп вроде есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:03 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp rdb_dev, То есть модель желательно такая - не демон опрашивает, а демон подписывается на.... ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:15 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp rdb_dev PetroNotC Sharp, а как на счёт штатного завершения твоей службы при получении сигнала от systemctl restart my.service ? Непредусмотрено? Просто киляем процесс и всё? И старт стоп вроде есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:17 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev который точно также отрабатывает (запускает дочерний процесс через fork()) и завершается. Хорошо, попробую и вам разжевать Код: plaintext 1. 2. 3. 4. 5. 6.
systemd стартовал fbguard (pid 761), который "подготовился к демонизации", fork-нулся, (как-то) проверил статус потомка (pid 765) и родительский процесс fbguard (успешно) завершился. Всё это время systemd ожидал демонизации fbguard и "взял на контроль" дочерний (pid 765) процесс fbguard. systemd "видит", что fbguard запустил ещё один процесс (firebird, pid 766), но состояние этого процесса-потомка systemd не контролирует. Отсутствие контроля легко проверить, сделав, например: Код: plaintext
Делаем: Код: plaintext 1. 2.
Активируем изменения, перезапускаем сервис и смотрим статус: Код: plaintext 1. 2. 3. 4. 5. 6. 7.
Вполне очевидно, что демонизацию процесса выполнил сам systemd и что он "следит" за напрямую целевым процессом. В частности, будет перезапускать процесс и устанавливать статус сервиса. В качестве побочного эффекта будут потеряны записи fbguard в firebird.log. Этакий "windows-style". Так вот - oneshot это подмножество simple, в котором systemd только выполняет демонизацию, но никак не заботится о завершении процесса и не реагирует на код ошибки завершённого процесса. P.S. Ах, да - директива PIDFile отсутствует в обоих вариантах юнита. P.P.S. Как сделать simple для fbguard - оставляется в качестве домашнего упражнения. Ещё полезно подумать, что будет, если взять файл, который самостоятельно демонизируется и сделать из него simple-юнит, а потом - oneshot-юнит. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:18 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Я не понял. Чем поможет сигнал, если все равно мой цикл Код: plaintext 1. 2. 3. 4. 5. 6. 7.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:18 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev В Linux "из коробки" вообще мало что работает. Процесс будет тупо прибит, что даже мяукнуть не успеет. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:20 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev PetroNotC Sharp rdb_dev, То есть модель желательно такая - не демон опрашивает, а демон подписывается на.... Думаю подписчик модуль-классА заказчика вешается на порт и мониторит его. При поступлении message он каллбэком вызывает меня. Вся кухня внутри классаА. Зачем тут мой цикл? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:21 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev PetroNotC Sharp пропущено... кстати, это вроде уже работает из коробки. И старт стоп вроде есть. Бездоказательно. Что мешает утилите systemctl послать все сигналы типа Приготовиться.... процессу? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:24 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:26 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Идеально мне надо Код: plaintext 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:29 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp rdb_dev пропущено... В Linux "из коробки" вообще мало что работает. Процесс будет тупо прибит, что даже мяукнуть не успеет. Бездоказательно. Что мешает утилите systemctl послать все сигналы типа Приготовиться.... процессу? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:30 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Слушай, обработать сигнал ТебяСчасГрохнут или плевать на него - дело программиста. Напишет освободить ресурс - освободится. Не напишет, Ось освободит как в винде вместе с процессом. Неверно говорить что процесс грохают методом вилки из розетки. Имхо ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:33 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp rdb_dev, Идеально мне надо Код: plaintext 1. 2. 3. 4.
Конечно, ты можешь порыскать на просторах гитхаба и, возможно, найдёшь там уже кем-то реализованную класс-обёртку или даже целую библиотеку-обёртку, если не надеешься на собственные силы и считаешь, что сделаешь это хуже, чем кто-либо. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:33 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Класс уже есть блин! Как цикл убрать? Или после return 0 Будет каллбэк работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:36 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
PetroNotC Sharp rdb_dev, Класс уже есть блин! Как цикл убрать? Сделай классу метод ListenEvents, который будет в цикле крутить msgrcv() и вызывать твою callback функцию. Так или иначе без подобных циклов не обходится даже в венде, просто они скрыты за реализацией соответствующих библиотечных функций. Другое дело, что они там могут быть реализованы намного грамотнее, чем сделало бы большинство начинающих программистов. PetroNotC Sharp Или после return 0 Будет каллбэк работать? ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:48 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Я понял. while(1)+sleep(1) оптимально для данной задачи как усыпить процесс. Класс уже написан, и убирать цикл внутрь него нет необходимости. Он и в ГУИ прогах работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 12:54 |
|
Как по новому пишется демон? systemd вместо init.d? fork() не нужен?
|
|||
---|---|---|---|
#18+
rdb_dev, Вот цикл номер два))))) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30.
... |
|||
:
Нравится:
Не нравится:
|
|||
07.10.2020, 13:03 |
|
|
start [/forum/topic.php?fid=57&msg=40006093&tid=2017314]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
325ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
62ms |
get tp. blocked users: |
1ms |
others: | 234ms |
total: | 665ms |
0 / 0 |