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]
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:
- többfelhasználós.target: ha a szerver rendben van, és készen áll a parancssori alkalmazások futtatására
- grafikus.target: amikor a GNOME vagy a KDE készen áll
- 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:
- 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.
- 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.SHNem 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-webCsoport = 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:
- Az alkalmazás közvetlenül el tudja olvasni a környezeti változót.
- 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 / environmentAz / etc / penguin-web-app / environment fájl a következőket tartalmazza:
LISTEN_PORT = 8080Ezutá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-reloadOké, 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ásHa nem sikerül egy Unit not found hibával, mint ez:
$ sudo systemctl start pingvin-web-alkalmazás.szolgáltatásNem 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ásAz 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ásKö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!