sistemski

datoteka systemd jedinice koja stvara uslugu

datoteka systemd jedinice koja stvara uslugu
Upravljanje uslugama je nešto čega se uopće ne sjetite kada svakodnevno koristite Linux radnu stanicu ili Linux poslužitelj, ali kad ga nema, stvarno će vam se svidjeti. Na primjer, kada kreirate novi poslužiteljski program koji se treba izvoditi 24/7, raditi ovaj izazov bez upravljanja uslugama je noćna mora kada ustvari sami stvarate mali servisni sustav, koji očito neće biti toliko dobar kao upravitelj koji je razvio ionako pun tim tijekom godina.

Svojim uslugama systemd sve ovo čini lakšim, zaista lakšim. Čim poželite da nešto nadgleda vašu aplikaciju i jednostavnu kontrolu nad njom, systemd je put, a to ću ovdje objasniti!

Gdje su Systemd usluge

Pa, da biste dodali novu uslugu, morate odgovoriti na ovo pitanje. Kao i uvijek u systemd, ovisi da li je usluga samo za vašeg korisnika ili cijeli sustav. Usredotočit ćemo se na to kako systemd radi za cijele sistemske usluge.

Točno mjesto ovisi o tome zašto i kako je usluga instalirana. Ako uslugu instalira upravitelj paketa, ona će općenito biti u / usr / lib / systemd / system. Za softver koji razvijete ili onaj koji sam ne podržava systemd, datoteku usluge stavit ćete u / usr / local / lib / systemd / system. Imajte na umu da neke distribucije ne podržavaju ovu mapu u / usr / local. Napokon, ako želite konfigurirati postojeću uslugu systemd, put je / etc / systemd / system.

Unutar ovih mapa možete pronaći višestruke nastavke datoteka kao što je *.utičnica, *.meta ili *.servis. Očito ćemo se usredotočiti na posljednje. systemd koristi naziv datoteke kao naziv usluge prilikom pokretanja ili zaustavljanja itd. Dakle, općenito imena datoteka u usluzi sadrže samo alfanumeričke znakove, zajedno sa crticama i donjim crtama. Tijekom razvoja preporučujem da ga stvorite u dokumentima, a zatim po završetku kopirate na sistemsko mjesto, što bi izbjeglo probleme ako spremite usred uređivanja.

U redu, zato vas molimo stvorite datoteku usluge u dokumentima. Sada smo spremni pregledati kako napisati ovu datoteku.
[Napomena: Pogledajte izvještaj o potencijalnoj grešci u odjeljku za komentare ovog posta na blogu]

[Jedinica]
Opis = HTTP poslužitelj Penguins Web Application (pokrenut u portu 8080)
WantedBy = višekorisnički.cilj
 
[Servis]
Tip = jednostavno
ExecStart = / usr / bin / python3 / usr / local / bin / penguin-web-app / main.py
Restart = uvijek

Format datoteke zapravo je blizak ini. Znam da je možda čudno jer se ini datoteke često nalaze u sustavu Windows, ali tako to funkcionira. Datoteka usluge prvo je podijeljena u 2 odjeljka: [Jedinica] i [Usluga]. Svaki odjeljak konfigurira određeni aspekt systemd: [Unit] sadrži elemente koje dijele sve datoteke systemd jedinice dok je [Service] samo za konfiguraciju specifičnu za postavljanje nove usluge.

Tada je odjeljak konfiguriran sa svojstvima kao što su Opis = ili ExecStart =. Vrijednost je od imena svojstva odijeljena znakom jednakosti = bez razmaka.

Vratimo se na datoteku prikazanu gore. Opisuje uslugu dizajniranu za pokretanje web aplikacije napisane na Pythonu o pingvinima. systemd će ga ponovo pokrenuti kad god proces izađe i pokreće poslužitelj prilikom pokretanja poslužitelja ako ga omogućite naredbom systemctl enable. Cool eh?

Ali vi ste možda vaša sljedeća web aplikacija ne o pingvinima - i to je sramota - a nije napisano na Pythonu. U ovom ćete slučaju htjeti saznati više o mogućim konfiguracijama.

Svojstva Systemd usluga

Prvo se usredotočimo na svojstva u [Jedinici]:

Opis = je samo davanje jasnog opisa onoga što usluga radi. Prikazuje se na popisu usluga, zapisnicima usluga, tako da želite da bude opisan, ali trebao bi ostati u jednom retku i jednoj rečenici.

WantedBy = dopušta da kaže systemd: kad se ova stvar pokrene, pokreće i mene. Općenito ćete staviti ime cilja. Primjeri uobičajenih ciljeva:

  1. višekorisnički.cilj: kada je poslužitelj u redu i spreman je za pokretanje aplikacija naredbenog retka
  2. grafički.cilj: kada su GNOME ili KDE spremni
  3. umrežavanje.cilj: kada je poslužitelj pravilno povezan s mrežom

U redu za početak su ova svojstva [Jedinice] dovoljna. Pogledajmo sada [Uslugu].

Type = pomaže systemd-u kako saznati radi li usluga. Ovdje su uobičajene vrste:

  1. Jednostavno se vjerojatno najčešće koristi: systemd postupak koji pokrećete smatra onim koji vrši uslugu. Ako se proces zaustavi, smatra da je i usluga zaustavljena itd.
  2. račvanje je poželjno za programe koji su napisani kao poslužitelj, ali bez pomoći sustava za upravljanje uslugama. U osnovi očekuje da se pokrenuti postupak račva i ta se vilica smatra konačnim postupkom usluge. Da biste bili precizniji, možete pomoći i sistematiziranju s PID datotekom, gdje PID procesa koji treba pratiti zapisuje pokrenuta aplikacija.

ExecStart = vjerojatno je najvažniji za uslugu: precizira koju će aplikaciju pokrenuti prilikom pokretanja usluge. Kao što možete vidjeti u usluzi Penguin, odmah sam koristio / usr / bin / python3, a ne python3. To je zato što systemd dokumentacija izričito preporučuje upotrebu apsolutnih staza kako bi se izbjegla iznenađenja.

Ali to je i iz drugog razloga. Sustav upravljanja ostalim uslugama obično se temelji na Shell skriptama. Međutim, systemd iz razloga izvedbe prema zadanim postavkama ne izvodi školjku. Dakle, ne možete izravno pružiti naredbu ljuske u ExecStart =. Međutim, i dalje možete koristiti skriptu ljuske čineći:

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

Nije tako teško u pravu? Imajte na umu da ako trebate pokrenuti neki postupak kako biste signalizirali da se vaša usluga čisto zaustavlja, ExecStop = postoji, kao i ExecReload = za ponovno učitavanje usluga.

Restart = omogućuje vam izričito određivanje kada uslugu treba ponovno pokrenuti. Ovo je jedna od važnih značajki systemd-a: osigurava da vaša usluga ostaje onoliko dugo koliko želite, zato dobro obratite pažnju na ovu opciju.

Ponovno pokreni = Značenje
stalno systemd će ga nastaviti ponovno pokretati kad god se zaustavi ili padne. Pa, dok ne napravite systemctl zaustavite ime usluge.servis.

Savršen je za poslužitelje i mrežne usluge jer više volite malo beskorisnih ponovnih pokretanja nego ručno ponovno pokretanje usluge bez ikakvog razloga.

na-nenormalan Kad se postupak usluge sruši, ponovo pokrenite uslugu. Međutim, ako aplikacija izlazi čisto, nemojte je ponovno pokretati.

Korisnije je za cron-poslove poput usluga koje trebaju pouzdano obaviti zadatak, ali ne moraju se stalno izvoditi.

na-neuspjeh Slično kao on-abnormalno, ali također ponovno pokreće uslugu kada aplikacija izađe čisto, ali s izlaznim kodom koji nije nula. Izlazni kod koji nije nula općenito znači da se dogodila pogreška.
Ne systemd neće automatski ponovo pokrenuti uslugu.

Općenito korisno za pristup drugim sistemskim značajkama kao što je bilježenje bez značajke ponovnog pokretanja.

WorkingDirectory = može nametnuti radni direktorij prilikom pokretanja vaše aplikacije. Vrijednost mora biti apsolutna staza direktorija. Radni direktorij koristi se kada koristite relativne staze u kodu vaše aplikacije. Za našu službu pingvina to bi moglo biti:

WorkingDirectory = / srv / penguin-web-app /

Tada je sigurnost važna, tako da općenito ne želite pokretati svoju uslugu s root privilegijama. User = i Group = omogućuje vam postavljanje imena korisnika ili grupe ili UID / GID pod kojim će se vaša aplikacija pokretati. Na primjer:

Korisnik = pingvin-web
Grupa = pingvinska mreža

EnvironmentFile = je moćna opcija. Aplikacije koje se izvode kao usluge često trebaju konfiguraciju i datoteke okruženja omogućuju postavljanje te konfiguracije na dva načina:

  1. Aplikacija može izravno čitati varijablu okoline.
  2. Ali također možete postaviti različite argumente naredbenog retka za svoju aplikaciju bez promjene datoteke usluge.

Sintaksa ove datoteke je jednostavna: upišete ime varijable okoline, znak jednakosti =, a zatim njezinu vrijednost. Zatim stavite apsolutni put datoteke vaše okoline u svojstvo EnvironmentFile.

Tako primjer:

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

A datoteka / etc / penguin-web-app / environment sadrži:

LISTEN_PORT = 8080

Tada će naša web aplikacija pingvini imati pristup varijabli okruženja LISTEN_PORT i preslušati očekivani port.

Spremite i pokrenite novostvorenu uslugu Systemd

Dakle, ako ste slijedili moj savjet, uredili ste datoteku usluge u svom kućnom direktoriju. Jednom kada budete zadovoljni, kopirajte tu datoteku u / usr / local / lib / systemd / system, pod pretpostavkom da vaša distribucija podržava taj put. Naziv datoteke vaše servisne datoteke bit će njezin naziv usluge. Ovo ime datoteke mora završiti s .servis. Na primjer, za naš poslužitelj pingvina to bi bila aplikacija za pingvine.servis.

Zatim morate reći systemd-u da ste dodali novu uslugu, pa morate upisati ovu naredbu:

$ sudo systemctl daemon-reload

U redu, sada je systemd svjestan vaše nove usluge, pod pretpostavkom da datoteka ne sadrži sintaksnu pogrešku. Napokon, to je vaša prva datoteka, pa ćete vjerojatno pogriješiti. Morate pokrenuti ovu naredbu gore pri svakom ažuriranju u datoteci usluge.

Sada je vrijeme za pokretanje usluge:

$ sudo systemctl pokreni pingvin-web-aplikaciju.servis

Ako ne uspije s greškom jedinice nije pronađena, poput ove:

$ sudo systemctl pokreni pingvin-web-aplikaciju.servis
Pokretanje web-aplikacije pingvin nije uspjelo.usluga: Jedinica nije pronađena.

To znači da vaša distribucija ne podržava direktorij ili da niste pravilno imenovali datoteku usluge. Obavezno provjerite.

Ako svoju uslugu postavite s WantedBy = i želite da se vaša usluga automatski pokreće, morate je omogućiti ovom naredbom:

$ sudo systemctl omogući pingvin-web-aplikaciju.servis

Super stvar kod usluge je što radi u pozadini. Problem: kako znati radi li ispravno i radi li u pozadini? Ne brinite, sistemski tim razmišljao je i o tome i dao naredbu da provjeri radi li ispravno, od koliko vremena itd.:

$ systemctl status pingvin-web-aplikacija.servis

Zaključak

Čestitamo! Sada možete upravljati svojim aplikacijama bez da vam je stalo da ih svaki put ručno pokrenete. Sada vam preporučujem da pročitate naš drugi članak o systemd zapisnicima: Master journalctl: razumijevanje systemd dnevnika. Uz to možete koristiti snažni sustav zapisivanja na svojoj novoj usluzi i izgraditi pouzdanije poslužitelje!

Kako koristiti AutoKey za automatizaciju Linux igara
AutoKey je uslužni program za automatizaciju radne površine za Linux i X11, programiran na Python 3, GTK i Qt. Koristeći njegovu skriptiranje i MACRO ...
Kako prikazati brojač FPS-a u Linux igrama
Linux gaming dobio je velik poticaj kada je Valve najavio Linux podršku za Steam klijent i njihove igre 2012. godine. Od tada su mnoge AAA i indie igr...
Kako preuzeti i igrati Sid Meier's Civilization VI na Linuxu
Uvod u igru Civilization 6 moderan je pogled na klasični koncept predstavljen u seriji igara Age of Empires. Ideja je bila prilično jednostavna; započ...