systemd

soubor systémové jednotky vytvářející službu

soubor systémové jednotky vytvářející službu
Správa služeb je něco, na co si ani nemyslíte, když používáte pracovní stanici Linux nebo server Linux každý den, ale když tam není, budete to opravdu nenávidět. Když vytvoříte například nový serverový program, který musí běžet 24 hodin denně, 7 dní v týdnu, je provádění této výzvy bez správy služeb noční můrou, kdy si sami vytvoříte malý servisní systém, který samozřejmě nebude tak dobrý jako manažer vyvinutý společností v každém případě celý tým.

Díky svým službám to systemd usnadňuje, opravdu usnadňuje. Jakmile budete chtít něco sledovat vaši aplikaci a snadno ji ovládat, systemd je způsob, jak jít, a to je to, co zde vysvětlím!

Kde jsou služby Systemd

Chcete-li přidat novou službu, musíte odpovědět na tuto otázku. Jako vždy v systemd záleží na tom, zda je služba určena pouze pro vašeho uživatele nebo pro celý systém. Zaměříme se na to, jak systemd funguje pro celé systémové služby.

Přesné umístění závisí na tom, proč a jak byla služba nainstalována. Pokud je služba nainstalována správcem balíčků, bude obvykle v adresáři / usr / lib / systemd / system. U softwaru, který vyvíjíte, nebo softwaru, který sám o sobě nepodporuje systemd, vložíte servisní soubor do / usr / local / lib / systemd / system. Mějte však na paměti, že některé distribuce nepodporují tuto složku v / usr / local. Nakonec, pokud chcete konfigurovat existující službu systemd, je cesta / etc / systemd / system.

Uvnitř těchto složek najdete více přípon souborů, například *.zásuvka, *.cíl nebo *.servis. Je zřejmé, že se zaměříme na poslední. systemd používá název souboru jako název služby při spuštění nebo zastavení služby atd. Obecně tedy názvy souborů v provozu obsahují pouze alfanumerické znaky spolu s pomlčkami a podtržítky. Během vývoje doporučuji vytvořit jej ve svých dokumentech a po dokončení jej zkopírovat do systémového umístění, což by vám zabránilo problémům, pokud uložíte uprostřed editace.

Dobře, proto prosím vytvořte servisní soubor ve svých dokumentech. Nyní jsme připraveni zkontrolovat, jak napsat tento soubor.
[Poznámka: Podívejte se na hlášení potenciálních chyb v sekci komentářů tohoto příspěvku na blogu]

[Jednotka]
Popis = Webový server HTTP Penguins (běží na portu 8080)
WantedBy = více uživatelů.cílová
 
[Servis]
Typ = jednoduchý
ExecStart = / usr / bin / python3 / usr / local / bin / penguin-web-app / main.py
Restartovat = vždy

Formát souboru je ve skutečnosti blízký ini. Vím, že to může být divné, protože soubory ini se často nacházejí v systému Windows, ale tak to funguje. Soubor služeb je nejprve rozdělen na 2 části: [Unit] a [Service]. Každá část konfiguruje konkrétní aspekt systemd: [Unit] obsahuje prvky sdílené všemi soubory systemd unit, zatímco [Service] je pouze pro konfiguraci specifickou pro nastavení nové služby.

Poté je sekce nakonfigurována s vlastnostmi, jako je Description = nebo ExecStart =. Hodnota je oddělena od názvu vlastnosti znaménkem rovná se = bez mezery.

Vraťme se k souboru zobrazenému výše. Popisuje službu určenou ke spuštění webové aplikace napsané v Pythonu o tučňácích. systemd jej restartuje vždy, když proces skončí a spustí server při spuštění serveru, pokud jej povolíte příkazem systemctl enable. Super eh?

Ale možná jste, že vaše další webová aplikace není o tučňácích - a to je škoda - a není to napsáno v Pythonu. V tomto případě se budete chtít dozvědět více o možných konfiguracích.

Vlastnosti Systemd Services

Nejprve se zaměřme na vlastnosti v [Jednotka]:

Description = je pouze o jasném popisu toho, co služba dělá. Je zobrazen v seznamu služeb, protokolech služeb, takže chcete, aby byly popisné, ale měly by zůstat v jednom řádku a jedné větě.

WantedBy = umožňuje říci systemd: když je tato věc spuštěna, spustí mě také. Obecně dáte název cíle. Příklady společných cílů:

  1. Multi uživatel.cíl: když je server v pořádku a je připraven ke spuštění aplikací příkazového řádku
  2. grafický.cíl: když je GNOME nebo KDE připraveno
  3. připojení k síti.cíl: když je server správně připojen k síti

Dobře na začátek tyto vlastnosti [Jednotky] stačily. Pojďme se nyní na [Službu] podívat.

Type = pomáhá systemd zjistit, zda je služba spuštěna. Zde jsou běžné typy:

  1. jednoduchý je pravděpodobně nejčastěji používaný: systemd považuje proces, který spustíte, za proces provádějící službu. Pokud se proces zastaví, považuje službu také za zastavenou atd.
  2. forking je preferován pro aplikace, které byly napsány jako server, ale bez pomoci systému správy služeb. V zásadě očekává spuštěný proces na fork a tato fork je považována za finální proces pro službu. Abychom byli přesnější, můžete také pomoci systemd se souborem PID, kde je PID procesu ke sledování zapsán spuštěnou aplikací.

ExecStart = je pro službu pravděpodobně nejdůležitější: upřesňuje, kterou aplikaci má spustit při spuštění služby. Jak vidíte ve službě Penguin, hned jsem použil / usr / bin / python3 a ne python3. Je to proto, že dokumentace systemd výslovně doporučuje používat absolutní cesty, aby nedošlo k překvapení.

Ale to je také z jiného důvodu. Systém správy ostatních služeb má tendenci být založen na skriptech Shell. Systemd však z důvodu výkonu ve výchozím nastavení nespustí shell. Takže nemůžete zadat přímo příkaz shellu v ExecStart =. Stále však můžete použít shell skript provedením:

ExecStart = / usr / bin / bash / usr / local / bin / launch-penguin-server.sh

Ne tak těžké právo? Všimněte si, že pokud potřebujete spustit nějaký proces, který signalizuje vaší službě, aby se zastavila čistě, ExecStop = existuje, stejně jako ExecReload = pro opětovné načtení služeb.

Restart = umožňuje explicitně určit, kdy má být služba restartována. Toto je jedna z důležitých vlastností systemd: zajišťuje, že vaše služba zůstane tak dlouho, jak si přejete, proto věnujte pozornost této možnosti.

Restartovat = Význam
vždy systemd jej bude restartovat pokaždé, když skončí nebo spadne. No, dokud neprovedete systemctl stop service-name.servis.

Je ideální pro servery a online služby, protože upřednostňujete několik zbytečných restartů před manuálním restartováním služby bez jakéhokoli důvodu.

nenormální Když dojde k chybě procesu služby, restartujte službu. Pokud se však aplikace čistě ukončí, nerestartujte ji.

Je to užitečnější pro úlohy typu cron, jako jsou služby, které potřebují spolehlivě provést úkol, ale nepotřebují běžet pořád.

selhání Stejně jako on-abnormal, ale také restartuje službu, když aplikace skončí čistě, ale s nenulovým ukončovacím kódem. Nenulové výstupní kódy obecně znamenají, že došlo k chybě.
Ne systemd nebude automaticky restartovat službu.

Obecně užitečné pro získání přístupu k dalším funkcím systému, jako je přihlášení bez funkce restartu.

WorkingDirectory = může vynutit pracovní adresář při spuštění aplikace. Hodnota musí být absolutní cesta k adresáři. Pracovní adresář se používá, když v kódu aplikace používáte relativní cesty. Pro naši službu tučňáky to může být:

WorkingDirectory = / srv / penguin-web-app /

Poté je důležité zabezpečení, takže obvykle nechcete službu spouštět s oprávněním root. User = and Group = umožňuje nastavit jméno uživatele nebo skupiny nebo UID / GID, pod kterým bude vaše aplikace spuštěna. Například:

Uživatel = tučňák-web
Skupina = web tučňáků

EnvironmentFile = je mocná volba. Aplikace spuštěné jako služby často vyžadují konfigurační a soubory prostředí umožňují tuto konfiguraci nastavit dvěma způsoby:

  1. Aplikace může číst přímo proměnnou prostředí.
  2. Ale také můžete nastavit různé argumenty příkazového řádku pro vaši aplikaci bez změny souboru služby.

Syntaxe tohoto souboru je jednoduchá: zadáte název proměnné prostředí, znaménko rovná se = a poté její hodnotu. Potom do vlastnosti EnvironmentFile vložíte absolutní cestu k vašemu souboru prostředí.

Příklad:

EnvironmentFile = / etc / penguin-web-app / environment

A soubor / etc / penguin-web-app / environment obsahuje:

LISTEN_PORT = 8080

Pak bude mít naše webová aplikace tučňáky přístup k proměnné prostředí LISTEN_PORT a poslouchat očekávaný port.

Uložte a spusťte nově vytvořenou službu Systemd

Pokud jste se tedy řídili mou radou, upravili jste servisní soubor ve svém domovském adresáři. Jakmile budete spokojeni, zkopírujte tento soubor do / usr / local / lib / systemd / system za předpokladu, že vaše distribuce tuto cestu podporuje. Název souboru služby bude jeho název služby. Tento název souboru musí končit .servis. Například pro náš server tučňáků by to byla aplikace tučňáka-web.servis.

Poté musíte systému říct, že jste přidali novou službu, takže musíte zadat tento příkaz:

$ sudo systemctl daemon-reload

Dobře, nyní systemd ví o vaší nové službě za předpokladu, že váš soubor neobsahuje syntaktickou chybu. Koneckonců, je to váš první soubor, takže je pravděpodobné, že uděláte chyby. Tento příkaz musíte spustit výše při každé aktualizaci v souboru služby.

Nyní je čas spustit službu:

$ sudo systemctl start penguin-web-app.servis

Pokud selže s chybou Unit not found, jako je tato:

$ sudo systemctl start penguin-web-app.servis
Nepodařilo se spustit webovou aplikaci tučňáka.služba: Jednotka nebyla nalezena.

To znamená, že vaše distribuce nepodporuje adresář nebo jste nepojmenovali správně svůj servisní soubor. Nezapomeňte se podívat.

Pokud nastavíte svou službu s WantedBy = a chcete, aby se vaše služba spouštěla ​​automaticky, musíte ji povolit pomocí tohoto příkazu:

$ sudo systemctl povolit webovou aplikaci tučňáka.servis

Super věc se službou je, že běží na pozadí. Problém: jak zjistit, zda běží správně a zda běží, pokud běží na pozadí? Nedělejte si starosti, tým systemd o tom také přemýšlel a zadal příkaz, aby zjistil, zda běží správně, kolik času atd .:

$ systemctl status penguin-web-app.servis

Závěr

gratuluji! Nyní můžete mít své aplikace spravované, aniž byste se museli starat o jejich ruční restartování pokaždé. Nyní vám doporučuji přečíst si náš další článek o protokolech systemd: Master journalctl: understand systemd logs. Díky tomu můžete ve své nové službě použít výkonný systém protokolování a vytvářet spolehlivější servery!

Hry Jak zvýšit FPS v Linuxu?
Jak zvýšit FPS v Linuxu?
FPS znamená Snímků za sekundu. Úkolem FPS je měřit snímkovou frekvenci při přehrávání videa nebo herních výkonech. Jednoduše řečeno, počet nepřerušova...
Hry Nejlepší hry Oculus App Lab
Nejlepší hry Oculus App Lab
Pokud jste vlastníkem náhlavní soupravy Oculus, musíte mít informace o bočním nakládání. Sideloading je proces instalace neukládaného obsahu do náhlav...
Hry Top 10 her k hraní na Ubuntu
Top 10 her k hraní na Ubuntu
Platforma Windows byla jednou z dominujících platforem pro hraní her kvůli velkému procentu her, které se dnes vyvíjejí, aby nativně podporovaly Windo...