GNU/Linux >> Znalost Linux >  >> Linux

Proč většina příkladů Systemd obsahuje Wantedby=multi-user.target?

Přečetl jsem si, co je multi-user.target a dokumentaci systemd, která uvádí, že multi-user.target je speciální cíl. Navíc tento řádek obsahuje mnoho příkladů systemd.

  1. Proč tolik vzorových služeb obsahuje tento řádek?
  2. Co by se stalo, kdyby neobsahovaly WantedBy=multi-user.target?
  3. Mohl byste mi uvést příklad, kdy by bylo skutečně vhodné tento řádek nezahrnout do definice souboru služby?
  4. Podobně, kdy je dobré tuto linii zachovat?

Přijatá odpověď:

1.) multi-user.target je v podstatě nejbližší ekvivalent klasického běhu SysVinit 3, který systemd má. Když systemd systém se spustí, systemd se snaží, aby stav systému odpovídal stavu určenému default.target – což je obvykle alias pro graphical.target nebo multi-user.target .

multi-user.target obvykle definuje stav systému, kdy jsou spuštěny všechny síťové služby a systém bude přijímat přihlášení, ale není spuštěno místní GUI. Toto je typický výchozí stav systému pro serverové systémy, což mohou být bezhlavé systémy namontované v racku ve vzdálené serverové místnosti.

graphical.target je další možný alias pro default.target . Normálně je definován jako nadmnožina multi-user.target :zahrnuje vše multi-user.target ano, plus aktivace místního přihlášení do GUI. Takže něco jako runlevel 5 v klasickém SysVinit.

Řádek WantedBy=multi-user.target ve službě je v podstatě totéž jako zadání „tato služba by se měla spustit na úrovních 3, 4 a 5“ v systémech SysVinit:říká to systemd že tato služba by měla být spuštěna jako součást normálního spouštění systému bez ohledu na to, zda je aktivní místní grafické uživatelské rozhraní.

Nicméně WantedBy je oddělená od stavu zapnuto/vypnuto:takže v jiném smyslu je to něco jako „přednastavení“:určuje, za jakých podmínek může dojít k automatickému spuštění, ale pouze tehdy, když je služba povolena.

2.) pokud vynecháte WantedBy=multi-user.target linka a žádná jiná povolená služba neobsahuje Requires=your.service nebo Wants=your.service v definici služby se vaše služba nespustí automaticky.

systemd funguje na závislostech a při spouštění, pokud nic Requires nebo Wants vaši službu, nespustí se, i když je služba povolena.

Jistě, můžete upravit svůj default.target přidat nebo odstranit Requires nebo Wants řádky pro všechny služby, které chcete spustit při spouštění – ale abyste mohli do systému vložit nový soubor služby a nechat jej pracovat ve výchozím nastavení (což velmi usnadňuje správcům softwarových balíčků), systemdWantedBy a RequiredBy klíčová slova, která lze použít k vložení Wants a Requires -typové závislosti (respektive) z „druhého konce“.

Související:Ubuntu – systemd „aktivace zásuvky“ vs xinetd?

3.) Pokud neděláte, měli byste řádek vynechat chcete, aby se služba vždy spouštěla ​​automaticky při spouštění, nebo tato služba je součástí řetězce závislostí, které jste explicitně definovali.

Můžete například refaktorovat serverovou aplikaci A a z nějakého důvodu se rozhodnete rozdělit některé volitelné funkce z ní na samostatnou službu B, abyste uživateli umožnili volbu neinstalovat ji, pokud to není potřeba. Pak byste mohli ze služby B udělat samostatnou service-B.rpm a definujte B.service s WantedBy=A.service vytvořit systemd spustit službu B automaticky při každém spuštění služby A – ale pouze když service-B.rpm je skutečně nainstalován.

Všimněte si, že Wants nebo WantedBy pouze říká, že systém by měl spustit jednu službu vždy, když je také spuštěna jiná služba nebo cíl, ale neurčuje vůbec nic o pořadí spouštění/vypínání. Pokud potřebujete, aby služba B byla již spuštěna při spuštění služby A, musíte přidat Before=A.service v B.service soubor explicitně specifikovat závislost pořadí spouštění.

4.) Kdykoli uděláte chcete, aby služba měla možnost automatického spouštění při spouštění a aby nebyly definovány žádné další závislosti.


Linux
  1. Přidání nové služby do Linux systemd

  2. Proč Systemd zastavuje službu ihned po jejím spuštění?

  3. Příklady příkazů systemctl v Linuxu

  1. Jak zastavit službu systemd

  2. Zajistěte, aby uživatelská služba systemd závisela na systémovém cíli

  3. Jak spustit skript s systemd těsně před vypnutím?

  1. Spravujte spouštění pomocí systemd

  2. 10 praktických příkazů systemd:Reference

  3. aktivace soketu systemd vs xinetd