Portál AbcLinuxu, 14. května 2025 23:20

Dotaz: Systemd.service - vynucení čekání na inicializaci

15.6.2016 15:08 ondra
Systemd.service - vynucení čekání na inicializaci
Přečteno: 343×
Odpovědět | Admin
Ahoj všem,

v kostce - přemýšlím, jak bych měl definovat službu v systemd tak, aby čekala na inicializaci spuštěné aplikace a teprve poté byly aktivovány další jednotky, které na službě závisí. Příklad: Aplikace se po spuštění procesu nějakou dobu (cca 40 sec) inicializuje a když má hotovo, začne naslouchat na TCP portu a obsluhovat požadavky.

Pokud aplikaci spustím jako service v systemd, tak ten jí považuje za aktivní v okamžiku, kdy spustí její proces, a dál se o to nezajímá. Ostatní systemd služby, které jsou na ní závislé, těch 40 sekund zbytečně hází chyby.

Jde mi tedy o to, jak definovat, aby byla jednotka aktivní např. až při dostupnosti portu nebo existenci "ready-flag" souboru, apod.

Napadají mě jen dvě neelegantní řešení:

Napadá někoho, jak toto řešit? :-) V upstart bylo možné emitovat signály, kterými jsem toto vyřešil.

Díky, Ondra

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Josef Kufner avatar 15.6.2016 15:14 Josef Kufner | skóre: 70
Rozbalit Rozbalit vše Re: Systemd.service - vynucení čekání na inicializaci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Zkusil bych socket activation. Systemd připraví socket, aplikace se začne chystat. Klienti se připo jí k připravenému socketu a počkají, než se aplikace nachystá.
Hello world ! Segmentation fault (core dumped)
15.6.2016 15:36 Filip Jirsák | skóre: 68 | blog: Fa & Bi
Rozbalit Rozbalit vše Re: Systemd.service - vynucení čekání na inicializaci
Odpovědět | | Sbalit | Link | Blokovat | Admin
Možností je několik – socket activation, kdy socket vytvoří systemd a aplikaci ho předá už vytvořený. Další možností jsou služby typu dbus nebo notify, které dají systemd vědět, že nastartovaly, přes dbus nebo přes sd_notify.
15.6.2016 19:21 Ondra
Rozbalit Rozbalit vše Re: Systemd.service - vynucení čekání na inicializaci
Díky.. když na to teď koukám, tak sd_notify je přesně to, co hledám. Napíšu malý wrapper, který vrátí PID a bude hlídat stav inicializace a pak o tom dá do systemd vědět.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.