systemd

szolgáltatás létrehozására szolgáló systemd egységfájl

szolgáltatás létrehozására szolgáló systemd egységfájl
A szolgáltatáskezelés olyan dolog, amire nem is gondol, amikor mindennapi Linux-munkaállomását vagy Linux-szerverét használja, de ha nincs ott, akkor nagyon utálni fogja. Ha például egy új kiszolgáló programot hoz létre, amelynek 24/7 kell futnia, akkor ennek a kihívásnak a szolgáltatáskezelés nélküli elvégzése rémálom, amikor valójában maga hoz létre egy kis szolgáltatási rendszert, amely nyilvánvalóan nem lesz olyan jó, mint egy amúgy is teljes csapat.

A systemd szolgáltatásaival mindezt könnyebbé, igazán könnyebbé teszi. Amint azt akarja, hogy valami figyelje az alkalmazását, és könnyen ellenőrizhesse azt, a systemd a helyes út, és ezt fogom itt elmagyarázni!

Hol vannak a Systemd Services

Új szolgáltatás hozzáadásához meg kell válaszolnia ezt a kérdést. Mint mindig a systemd-ben, ez attól is függ, hogy a szolgáltatás csak a felhasználójának vagy az egész rendszernek szól-e. Arra fogunk összpontosítani, hogy a systemd hogyan működik az egész rendszerszolgáltatásnál.

A pontos hely attól függ, hogy miért és hogyan telepítették a szolgáltatást. Ha a szolgáltatást csomagkezelő telepíti, akkor általában az / usr / lib / systemd / system fájlban lesz. Az Ön által fejlesztett szoftverek vagy azok számára, amelyek önmagában nem támogatják a systemd-t, a / usr / local / lib / systemd / system könyvtárba kell tenni a szervizfájlt. Kérjük, ne feledje, hogy néhány disztribúció nem támogatja ezt a mappát a / usr / local fájlban. Végül, ha egy meglévő systemd szolgáltatást akar konfigurálni, akkor az / etc / systemd / system az út.

Ezekben a mappákban több fájlkiterjesztés található, például *.aljzat, *.cél vagy *.szolgáltatás. Nyilván az utolsóra fogunk koncentrálni. A systemd a fájl nevét használja a szolgáltatás neveként, amikor elindítja vagy leállítja stb. Tehát általában a használatban lévő fájlnevek csak alfanumerikus karaktereket tartalmaznak kötőjelekkel és aláhúzásokkal. A fejlesztés során azt javaslom, hogy hozza létre a dokumentumaiban, majd készen másolja a systemd helyre, ami elkerülné a problémákat, ha a szerkesztés közepére mentené.

OK, kérjük, hozza létre a szolgáltatási fájlt a dokumentumaiban. Most készen állunk a fájl megírásának áttekintésére.
[Megjegyzés: Lásd a lehetséges hibabejelentést a blogbejegyzés megjegyzés szakaszában]

[Mértékegység]
Leírás = Penguins webalkalmazás HTTP-kiszolgáló (a 8080-as porton fut)
WantedBy = többfelhasználós.cél
 
[Szolgáltatás]
Típus = egyszerű
ExecStart = / usr / bin / python3 / usr / local / bin / pingvin-web-app / main.py
Újraindítás = mindig

A fájlformátum valójában közel van az ini-hez. Tudom, hogy furcsa lehet, mivel az ini fájlokat gyakran megtalálják a Windows-ban, de ez így működik. A szolgáltatásfájl először 2 szakaszra oszlik: [Egység] és [Szerviz]. Minden szakasz a systemd egy meghatározott aspektusát konfigurálja: Az [Unit] az összes systemd unit fájl által megosztott elemeket tartalmazza, míg a [Service] csak egy új szolgáltatás beállításához szükséges konfigurációhoz használható.

Ezután a szakasz olyan tulajdonságokkal van konfigurálva, mint a Description = vagy az ExecStart =. Az értéket a tulajdonság nevétől az = egyenlőségjel választja el szóköz nélkül.

Térjünk vissza a fent látható fájlhoz. Olyan szolgáltatást ír le, amelyet a pingvinekről Pythonban írt webalkalmazás futtatására terveztek. A systemd akkor indítja újra, amikor a folyamat kilép és elindítja a szervert a szerver indításakor, ha engedélyezi a systemctl enable paranccsal. Menő, na?

De talán Ön a következő webalkalmazása nem a pingvinekről szól - és ez szégyen - és nem Pythonban van írva. Ebben az esetben többet szeretne megtudni a lehetséges konfigurációkról.

A Systemd Services tulajdonságai

Először koncentráljunk a [Unit] tulajdonságaira:

A Description = csak arról szól, hogy világosan leírják, mit csinál a szolgáltatás. Megjelenik a szolgáltatáslistában, a szolgáltatásnaplókban, hogy leíró jellegű legyen, de egy sorban és egy mondatban kell maradnia.

WantedBy = lehetővé teszi azt mondani a systemd-nek: amikor ez a dolog elindul, engem is elindít. Általában meg kell adnia a cél nevét. Példák a közös célokra:

  1. többfelhasználós.target: ha a szerver rendben van, és készen áll a parancssori alkalmazások futtatására
  2. grafikus.target: amikor a GNOME vagy a KDE készen áll
  3. hálózat felépítése.cél: ha a szerver megfelelően van csatlakoztatva egy hálózathoz

A kezdethez rendben van az [Unit] ezen tulajdonságai. Vessünk egy pillantást a [Szolgáltatás] -ra.

A Type = segít a systemd-nek abban, hogy megtudja, fut-e egy szolgáltatás. Íme a gyakori típusok:

  1. valószínűleg az egyszerű a leggyakrabban használt: a systemd az Ön által elindított folyamatot tekinti a szolgáltatónak. Ha a folyamat leáll, akkor a szolgáltatást is leállítja, stb.
  2. A forking előnyös azoknál az alkalmazásoknál, amelyeket szerverként írtak, de szolgáltatáskezelő rendszer segítsége nélkül. Alapvetően arra számít, hogy az elindított folyamat elágazik, és ezt a villát tekintik a szolgáltatás végső folyamatának. A pontosság érdekében segíthet a systemd-n egy PID-fájlban is, ahol a követendő folyamat PID-jét az indított alkalmazás írja.

Az ExecStart = valószínűleg a legfontosabb a szolgáltatás szempontjából: pontosan megadja, hogy melyik alkalmazást indítsa el a szolgáltatás indításakor. Mint a Penguin szolgáltatásban láthatja, a / usr / bin / python3 fájlt használtam, és nem azonnal a python3 fájlt. Ez azért van, mert a systemd dokumentáció kifejezetten az abszolút utak használatát javasolja a meglepetések elkerülése érdekében.

De ez egy másik okból is. Az egyéb szolgáltatások irányítási rendszere általában a Shell szkriptjein alapszik. Azonban a systemd, a teljesítmény miatt, alapértelmezés szerint nem futtat egy héjat. Tehát nem adhat meg közvetlenül egy shell parancsot az ExecStart = fájlban. Ugyanakkor továbbra is használhat egy shell parancsfájlt az alábbiakkal:

ExecStart = / usr / bin / bash / usr / local / bin / launch-pingvin-szerver.SH

Nem olyan nehéz? Ne feledje, hogy ha valamilyen folyamatot le kell futtatnia a szolgáltatás tiszta leállításának jelzésére, akkor létezik az ExecStop =, valamint a szolgáltatások újratöltéséhez az ExecReload =.

Restart = lehetővé teszi, hogy kifejezetten megmondja, mikor kell újraindítani a szolgáltatást. Ez a systemd egyik fontos tulajdonsága: biztosítja, hogy szolgáltatása mindaddig fennmaradjon, ameddig csak szeretné, ezért nagyon figyeljen erre a lehetőségre.

Újraindítás = Jelentése
mindig A systemd folytatja újraindítását, amikor leáll vagy összeomlik. Nos, amíg meg nem adod a systemctl stop service-name szót.szolgáltatás.

Tökéletes a szerverekhez és az online szolgáltatásokhoz, mivel inkább kevés haszontalan újraindítást szeretne, mint azt, hogy minden ok nélkül kézzel kell újraindítania a szolgáltatást.

kóros Amikor a szolgáltatás folyamata összeomlik, indítsa újra a szolgáltatást. Ha azonban az alkalmazás tisztán lép ki, ne indítsa újra.

Hasznosabb olyan Cron-joboknál, mint például a szolgáltatások, amelyeknek megbízhatóan kell elvégezniük a feladatot, de nem kell folyamatosan futtatniuk.

meghibásodás Hasonló, mint az abnormális, de újraindítja a szolgáltatást is, amikor az alkalmazás tisztán, de nem nulla kilépési kóddal lép ki. A nullától eltérő kilépési kódok általában hibát jelentenek.
nem A systemd nem indítja újra a szolgáltatást automatikusan.

Általában hasznos ahhoz, hogy hozzáférést kapjon a systemd egyéb szolgáltatásaihoz, például naplózás az újraindítás nélkül.

WorkingDirectory = kényszeríthet egy működő könyvtárat az alkalmazás indításakor. Az értéknek abszolút könyvtár útvonalnak kell lennie. A munkakönyvtár akkor használható, ha relatív elérési utakat használ az alkalmazás kódjában. A pingvinek szolgálatában ez lehet:

WorkingDirectory = / srv / pingvin-web-alkalmazás /

Ezután fontos a biztonság, ezért általában nem kívánja root szolgáltatásokkal indítani a szolgáltatást. A User = és a Group = lehetővé teszi annak a felhasználói vagy csoportnévnek vagy UID / GID-nek a beállítását, amely alatt az alkalmazás elindul. Például:

Felhasználó = pingvin-web
Csoport = pingvin-háló

A EnvironmentFile = egy hatékony lehetőség. A szolgáltatásként futó alkalmazásoknak gyakran van szükségük konfigurációra, és a környezeti fájlok lehetővé teszik a konfiguráció kétféle módon történő beállítását:

  1. Az alkalmazás közvetlenül el tudja olvasni a környezeti változót.
  2. Ugyanakkor különböző parancssori argumentumokat is beállíthat az alkalmazásához a szervizfájl megváltoztatása nélkül.

A fájl szintaxisa egyszerű: beírja a környezeti változó nevét, az egyenlőségjelet =, majd annak értékét. Ezután beírja a környezeti fájl abszolút elérési útját a EnvironmentFile tulajdonságba.

Tehát példa:

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

Az / etc / penguin-web-app / environment fájl a következőket tartalmazza:

LISTEN_PORT = 8080

Ezután pingvinek webalkalmazásunk hozzáfér a LISTEN_PORT környezeti változóhoz, és meghallgatja a várható portot.

Mentse és indítsa el az újonnan létrehozott Systemd szolgáltatást

Tehát, ha betartotta a tanácsomat, szerkesztette a szolgáltatási fájlt a saját könyvtárában. Ha elégedett, másolja a fájlt a / usr / local / lib / systemd / system fájlba, feltételezve, hogy a disztribúció támogatja ezt az utat. A szolgáltatási fájl fájlneve a szolgáltatás neve lesz. Ennek a fájlnévnek véget kell vetnie .szolgáltatás. Például a pingvinek szerverünk számára ez a pingvin-web-alkalmazás lenne.szolgáltatás.

Ezután el kell mondania a systemd-nek, hogy új szolgáltatást adott hozzá, ezért be kell írnia ezt a parancsot:

$ sudo systemctl daemon-reload

Oké, most a systemd tisztában van az új szolgáltatással, feltételezve, hogy a fájl nem tartalmaz szintaktikai hibát. Végül is ez az első fájlja, így valószínű, hogy hibázik. Ezt a parancsot a szolgáltatásfájl minden frissítésénél futtatnia kell.

Itt az ideje a szolgáltatás elindításának:

$ sudo systemctl start pingvin-web-alkalmazás.szolgáltatás

Ha nem sikerül egy Unit not found hibával, mint ez:

$ sudo systemctl start pingvin-web-alkalmazás.szolgáltatás
Nem sikerült elindítani a pingvin-web-alkalmazást.szolgáltatás: Az egység nem található.

Ez azt jelenti, hogy a terjesztés nem támogatja a könyvtárat, vagy nem megfelelően nevezte el a szervizfájlt. Feltétlenül nézd meg.

Ha a WantedBy = szolgáltatással állította be szolgáltatását, és azt szeretné, hogy a szolgáltatás automatikusan elinduljon, akkor ezt a parancsot kell engedélyeznie:

$ sudo systemctl engedélyezi a pingvin-web-alkalmazást.szolgáltatás

Az a jó dolog egy szolgáltatásnál, hogy a háttérben fut. A probléma: hogyan lehet tudni, hogy megfelelően működik-e, és ha a háttérben fut?? Ne aggódjon, a systemd csapat is gondolt erre, és adott egy parancsot, hogy ellenőrizze, hogy megfelelően működik-e, mivel mennyi idő stb.:

$ systemctl állapot pingvin-web-alkalmazás.szolgáltatás

Következtetés

gratula! Mostantól úgy kezelheti az alkalmazásokat, hogy nem törődik azzal, hogy minden alkalommal újraindítsa manuálisan. Most azt javaslom, hogy olvassa el a systemd naplókról szóló másik cikkünket: Master journalctl: a systemd naplók megértése. Ezzel használhatja az erőteljes naplózási rendszert új szolgáltatásában, és megbízhatóbb szervereket készíthet!

Az egér bal oldali gombja nem működik a Windows 10 rendszeren
Ha dedikált egeret használ laptopjával vagy asztali számítógépével, de a az egér bal gombja nem működik a Windows 10/8/7 rendszeren valamilyen oknál f...
A kurzor véletlenszerűen ugrik vagy mozog, miközben gépel a Windows 10-ben
Ha úgy találja, hogy az egér kurzor önállóan, automatikusan, véletlenszerűen ugrik vagy mozog, miközben gépel Windows laptopba vagy számítógépbe, akko...
Az egér és az érintőpadok görgetési irányának megfordítása a Windows 10 rendszerben
Egér és Érintőpads nemcsak a számítást könnyűvé, de hatékonyabbá és kevésbé időigényessé is teszi. Nem tudunk elképzelni egy életet ezek nélkül az esz...