GNU/Linux >> Znalost Linux >  >> Linux

Zjistit iniciační systém pomocí Shell?

To může mít více společného s detekcí operačních systémů, ale já konkrétně potřebuji systém init, který se v systému aktuálně používá.

Fedora 15 a Ubuntu nyní používají systemd, Ubuntu používalo Upstart (dlouhodobě výchozí do 15.04), zatímco ostatní používají varianty System V.

Mám aplikaci, kterou píšu jako multiplatformní démona. Init skripty jsou dynamicky generovány na základě parametrů, které lze předat při konfiguraci.

Chtěl bych pouze vygenerovat skript pro konkrétní init systém, který používají. Tímto způsobem lze spustit instalační skript rozumně bez parametrů jako root a démona lze „instalovat“ automaticky.

To je to, na co jsem přišel:

  • Vyhledejte systemd, upstart atd. v /bin
  • Porovnejte /proc/1/comm s systemd, upstart atd
  • Zeptejte se uživatele

Jaký by byl nejlepší způsob, jak toho dosáhnout na různých platformách?

Něco podobného, ​​Mohu se spolehnout na to, že bash bude na většině *nixu, nebo je to závislé na distribuci/OS?

Cílové platformy:

  • Mac OS
  • Linux (všechny distribuce)
  • BSD (všechny verze)
  • Solaris, Minix a další *nix

Přijatá odpověď:

Na druhou otázku je odpověď ne a měli byste se podívat na Zdroje pro programování přenosného shellu.

Co se týče prvního dílu – v první řadě si určitě musíte dávat pozor. Řekl bych, že proveďte několik testů, abyste se ujistili – protože to, že někdo systemd (např.) nainstalovaný, neznamená, že se ve skutečnosti používá jako výchozí init . Také se podívejte na /proc/1/comm může být zavádějící, protože některé instalace různých init programů mohou automaticky vytvořit /sbin/init pevný odkaz na symbolický odkaz nebo dokonce přejmenovanou verzi jejich hlavního programu.

Možná nejužitečnější by mohlo být podívat se na typ init skriptů – protože ty ve skutečnosti vytvoříte, bez ohledu na to, co je spustí.

Jako vedlejší poznámku se můžete také podívat na OpenRC, jehož cílem je poskytnout strukturu init skriptů, která je kompatibilní se systémy Linux i BSD.


Linux
  1. Jak zjistit, zda je Shell řízen z Ssh?

  2. Jaký je účel „uživatele systému“ v replikaci MySQL

  3. Jaký je smysl použití linuxového makra access_ok()

  1. Jaká je aktuální úroveň běhu systému Linux?

  2. Jaký je rozsah exportovaných proměnných shellu Unix?

  3. Co přesně init dělá?

  1. Jak otestovat, jaký Shell používám v terminálu?

  2. Co se přesně stane, když spustím soubor v prostředí Shell?

  3. Jaké jsou různé typy shellů v Linuxu?