Portál AbcLinuxu, 9. května 2025 19:00
Chtěl bych udělat následující věc: Na počítači běží určitá kritická aplikace, sekundární funkcí je nějaký TCP server. Mějme tedy TCP server, pro příklad WWW server na portu 80. Když přijde v historii běhu OS první požadavek na port 80, spustí se tento WWW server, obslouží požadavek a už zůstane běžet, další požadavky bude už obsluhovat přímo.
Proč to chci: Potřebuji maximálně rychlý boot (vzhledem ke kritické aplikaci), nezdržovaný pouštěním sekundárních služeb (mám jich docela hodně, ale skoro nikdy nejsou potřeba a když už jsou, není zas maximální požadavek na odezvy kritické aplikace).
Proč nevyhovuje inetd: pro všechny jeho nevýhody, t.j. pouští procesy pro každý request, navíc je to skrze stdin, stdout, obecně ne všechny servery (programy) takhle dokážou pracovat a často je to i nevhodné.
Proč nepustit kritickou aplikaci jako první a neodložit start WWW serveru na později: Musím mít co možná nejvíce zaručeno, že kritická aplikace bude mít k dispozici po náběhu tolik procesorového či I/O času, kolik potřebuje. Realtimové priority a priority na I/O jsou jen berlička, nelze na to úplně spolehnout (na holé x86 jo, ale na různých ARMech či malých Powerpc s mnoha periferiemi prostě ne), naproti tomu když kritická aplikace běží na systému skoro sama s realtimovou prioritou, už se na to spolehnout dá (zjištěnou inženýrskou indukcí, t.j. dostatečně dlouhým zkoušením).
Otázka: Napadá vás, jak toto spouštění "on demand" udělat? Nějaký helper v netfilteru, nebo tak něco? Případně je nějaká chyba v předchozích předpokladech (třeba o inetd)? Mně napadá jen napsat nějaký redirectinetd, který bude dělat nějakým způsobem redirect na jiný port a povede si evidenci, které daemony už spustil a které ne.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.