systemd

teenuse loomise süsteemifaili üksusfail

teenuse loomise süsteemifaili üksusfail
Teenusehaldus on midagi, millele te isegi oma Linuxi tööjaama või Linuxi serverit iga päev ei mõtle, kuid kui seda pole, siis tõesti vihkate seda. Kui loote näiteks uue serveriprogrammi, mis peab töötama 24/7, on selle väljakutse tegemine ilma teenuse haldamiseta õudusunenägu, kus loote tegelikult ise väikese teenindussüsteemi, mis pole ilmselt nii hea kui halduri poolt välja töötatud igal aastal täismeeskond.

Oma teenustega teeb systemd kõik selle lihtsamaks, tõesti lihtsamaks. Niipea kui soovite, et midagi jälgiks teie rakendust ja selle hõlpsat juhtimist, on süsteemitee õige tee ja seda ma siin selgitan!

Kus on Systemdi teenused

Uue teenuse lisamiseks peate sellele küsimusele vastama. Nagu süsteemis alati, sõltub see, kas teenus on mõeldud ainult teie kasutajale või kogu süsteemile. Keskendume sellele, kuidas systemd töötab kogu süsteemiteenuste puhul.

Täpne asukoht sõltub sellest, miks ja kuidas teenus installiti. Kui teenuse installib paketihaldur, on see tavaliselt kataloogis / usr / lib / systemd / system. Teie väljatöötatud tarkvara või tarkvara jaoks, mis ise süsteemi ei toeta, panete teenusefaili kataloogi / usr / local / lib / systemd / system. Pidage siiski meeles, et mõned jaotused ei toeta seda kausta kataloogis / usr / local. Lõpuks, kui soovite olemasoleva systemd-teenuse konfigureerida, on see tee / etc / systemd / system.

Nendest kaustadest leiate mitu faililaiendit, näiteks *.pistikupesa, *.sihtmärk või *.teenus. Ilmselgelt keskendume viimasele. systemd kasutab faili nime teenuse nimena selle käivitamisel või peatamisel jne. Seega sisaldavad kasutatavad failinimed koos sidekriipsude ja alakriipsudega ainult tähtnumbrilisi tähemärke. Arendamise ajal soovitan selle luua oma dokumentides ja seejärel kopeerida, kui see on valmis, see aitaks teil probleeme vältida, kui salvestate redigeerimise keskele.

OK, palun looge oma dokumentides oma teenusefail. Nüüd oleme valmis selle faili kirjutamise üle vaatama.
[Märkus: vaadake võimaliku veaaruannet selle ajaveebi postituse kommentaaride osas]

[Üksus]
Kirjeldus = Pingviinide veebirakenduse HTTP-server (töötab pordis 8080)
WantedBy = mitme kasutajaga.sihtmärk
 
[Teenus]
Tüüp = lihtne
ExecStart = / usr / bin / python3 / usr / local / bin / pingviin-veebirakendus / main.py
Taaskäivita = alati

Failivorming on tegelikult ini lähedane. Ma tean, et see võib olla imelik, kuna ini-faile leidub sageli Windowsis, kuid see töötab nii. Teenuse fail jagatakse kõigepealt kaheks osaks: [Üksus] ja [Teenus]. Igas jaotises konfigureeritakse systemd konkreetne aspekt: ​​[Unit] sisaldab elemente, mida jagavad kõik systemd unit failid, samal ajal kui [Service] on mõeldud ainult uue teenuse seadistamiseks.

Seejärel on sektsioon konfigureeritud selliste omadustega nagu Description = või ExecStart =. Väärtus eraldatakse atribuudi nimest võrdusmärgiga = ilma tühikuta.

Läheme tagasi ülaltoodud faili juurde. See kirjeldab teenust, mis on loodud Pythonis kirjutatud veebirakenduse käitamiseks pingviinide kohta. systemd taaskäivitab selle alati, kui protsess väljub ja käivitab serveri serveri käivitamisel, kui lubate selle käsuga systemctl enable. Lahe eh?

Kuid olete võib-olla teie järgmine veebirakendus pole seotud pingviinidega - ja sellest on kahju - ja see pole Pythonis kirjutatud. Sel juhul soovite lisateavet võimalike konfiguratsioonide kohta.

Systemd Services atribuudid

Kõigepealt keskendume [Unit] omadustele:

Kirjeldus = on lihtsalt selle kirjeldus, mida teenus teeb. See kuvatakse teenuste loendis, teenuselogides, nii et soovite, et see oleks kirjeldav, kuid see peaks jääma ühte ritta ja ühte lausesse.

WantedBy = võimaldab öelda systemd-le: kui see asi on alustatud, käivitab ka mina. Üldiselt panete sihtmärgi nime. Näited ühistest sihtmärkidest:

  1. mitme kasutajaga.sihtmärk: kui server on korras ja valmis käsurea rakendusi käitama
  2. graafiline.target: kui GNOME või KDE on valmis
  3. võrguühendus.sihtmärk: kui server on võrguga õigesti ühendatud

Alguseks on nendest [Unit] omadustest piisav. Vaatame nüüd [teenust].

Tüüp = aitab systemd-l teada, kas teenus töötab. Siin on levinumad tüübid:

  1. ilmselt on kõige sagedamini kasutatav lihtne: systemd peab teie käivitatud protsessi teenust osutavaks protsessiks. Kui protsess peatub, loeb see ka teenuse peatatuks jne.
  2. hargnemist eelistatakse rakenduste jaoks, mis on kirjutatud serveriks, kuid ilma teenuse haldussüsteemi abita. Põhimõtteliselt loodab ta, et käivitatud protsess hargneb ja seda kahvlit peetakse teenuse lõplikuks protsessiks. Täpsuse huvides võite aidata süsteemil ka PID-faili, kus käivitatava rakenduse kirjutab jälgitava protsessi PID.

ExecStart = on teenuse jaoks ilmselt kõige olulisem: see täpsustab, millise rakenduse teenuse käivitamisel käivitada. Nagu näete teenuses Penguin, olen kohe kasutanud faili / usr / bin / python3 ja mitte python3. Sellepärast, et systemd dokumentatsioon soovitab üllatuste vältimiseks selgesõnaliselt kasutada absoluutseid teid.

Kuid see on ka teisel põhjusel. Muude teenuste haldussüsteem põhineb tavaliselt Shelli skriptidel. Siiski ei käivita systemd jõudluse tõttu vaikimisi kestat. Nii et te ei saa ExecStart = -is otse anda käsku shell. Kooriskripti saate siiski kasutada, tehes järgmist:

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

Pole nii raske eks? Pange tähele, et kui peate oma teenuse puhtaks peatumiseks märku andma, tuleb käitada nii ExecStop = kui ka teenuste uuesti laadimiseks ExecReload =.

Taaskäivita = võimaldab teil selgesõnaliselt öelda, millal teenus tuleks taaskäivitada. See on systemd üks olulisi omadusi: see tagab teie teenuse püsimise nii kaua kui soovite, nii et pöörake sellele valikule suurt tähelepanu.

Taaskäivita = Tähendus
alati systemd jätkab selle taaskäivitamist alati, kui see katkeb või kokku jookseb. Noh, kuni te ei tee systemctl teenuse nime.teenus.

See sobib suurepäraselt serverite ja võrguteenuste jaoks, kuna eelistate väheseid kasutuid taaskäivitusi, mitte teenuse käsitsi taaskäivitamist ilma igasuguse põhjuseta.

ebanormaalne Kui teenusprotsess jookseb kokku, taaskäivitage teenus. Kuid kui rakendus väljub puhtalt, ärge taaskäivitage seda.

See on kasulikum selliste töökohtade jaoks nagu teenused, mis peavad ülesande usaldusväärselt tegema, kuid mida pole vaja kogu aeg käivitada.

ebaõnnestumine Sarnaselt ebanormaalsele, kuid taaskäivitab teenuse ka siis, kui rakendus väljub puhtalt, kuid nullist väljuva väljundkoodiga. Nullivälised väljumiskoodid tähendavad üldjuhul viga.
ei systemd ei taaskäivita teenust automaatselt.

Üldiselt kasulik, et pääseda juurde teistele systemd funktsioonidele, nagu logimine ilma taaskäivitamisfunktsioonita.

WorkingDirectory = saab rakenduse käivitamisel jõustada töökataloogi. Väärtus peab olema absoluutne kataloogitee. Töökataloogi kasutatakse siis, kui kasutate rakenduse koodis suhtelisi teid. Meie pingviiniteenuse jaoks võiks see olla:

WorkingDirectory = / srv / pingviin-veebirakendus /

Seejärel on turvalisus oluline, nii et te ei soovi tavaliselt oma teenust juurõigustega käivitada. Kasutaja = ja Grupp = võimaldab teil määrata kasutaja või rühma nime või UID / GID, mille all teie rakendus käivitatakse. Näiteks:

Kasutaja = pingviin-veeb
Grupp = pingviin-veeb

EnvironmentFile = on võimas valik. Teenustena töötavad rakendused vajavad sageli konfiguratsiooni ja keskkonnafailid võimaldavad selle konfiguratsiooni seadistada kahel viisil:

  1. Rakendus suudab keskkonnamuutujat otse lugeda.
  2. Samuti saate oma rakendusele seada erinevad käsureaargumendid ilma teenusefaili muutmata.

Selle faili süntaks on lihtne: sisestate keskkonnamuutuja nime, võrdusmärgi = ja seejärel selle väärtuse. Seejärel lisate oma keskkonnafaili absoluutse tee atribuudile EnvironmentFile.

Nii näide:

EnvironmentFile = / etc / pingviin-veebirakendus / keskkond

Ja fail / etc / pingviin-veebirakendus / keskkond sisaldab järgmist:

LISTEN_PORT = 8080

Siis on meie pingviinide veebirakendusel juurdepääs keskkonnamuutujale LISTEN_PORT ja kuulatakse eeldatavat porti.

Salvestage ja käivitage äsja loodud Systemd-teenus

Nii et kui järgisite minu nõuandeid, muutsite teenusefaili oma kodukataloogis. Kui olete rahul, kopeerige see fail asukohta / usr / local / lib / systemd / system, eeldades, et teie levitamine toetab seda teed. Teie teenusefaili failinimi on selle teenuse nimi. See failinimi peab lõppema .teenus. Näiteks meie pingviinide serveri jaoks oleks see pingviin-veebirakendus.teenus.

Seejärel peate süsteemiled ütlema, et lisasite uue teenuse, nii et peate tippima selle käsu:

$ sudo systemctl deemon-reload

Olgu, nüüd on systemd teie uuest teenusest teadlik, eeldades, et teie fail ei sisalda süntaksiviga. Lõppude lõpuks on see teie esimene fail, nii et tõenäoliselt teete vigu. Selle käsu peate käivitama iga teenusefaili värskenduse korral.

Nüüd on aeg teenust alustada:

$ sudo systemctl käivitage pingviin-veebirakendus.teenus

Kui see ebaõnnestub sellise üksusega, mida ei leitud, näiteks:

$ sudo systemctl käivitage pingviin-veebirakendus.teenus
Pingviini-veebirakenduse käivitamine ebaõnnestus.teenus: üksust ei leitud.

See tähendab, et teie levitamine ei toeta kataloogi või te ei nimetanud oma teenusefaili õigesti. Kontrollige kindlasti.

Kui seadistasite oma teenuse WantedBy = -ga ja soovite, et teie teenus käivituks automaatselt, peate selle lubama selle käsuga:

$ sudo systemctl lubab pingviini-veebirakenduse.teenus

Teenuse jaoks on lahe see, et see töötab taustal. Probleem: kuidas teada saada, kas see töötab korralikult ja kas see töötab, kui see töötab taustal? Ärge muretsege, süsteemikomando mõtles ka sellele ja andis käsu, et näha, kas see töötab korralikult, kui palju aega jne:

$ systemctl staatuse pingviin-veebirakendus.teenus

Järeldus

Palju õnne! Nüüd saate oma rakendusi hallata ilma, et hooliksite iga kord käsitsi taaskäivitamisest. Nüüd soovitan teil lugeda meie teist artiklit systemd logide kohta: Master journalctl: mõista systemd logisid. Selle abil saate oma uues teenuses kasutada võimsat logimissüsteemi ja ehitada usaldusväärsemaid servereid!

Vulkan Linuxi kasutajatele
Iga uue põlvkonna graafikakaartidega näeme, et mängude arendajad ületavad graafilise truuduse piire ja jõuavad fotorealismile ühe sammu lähemale. Kuid...
OpenTTD vs Simutrans
Oma transpordisimulatsiooni loomine võib olla lõbus, lõõgastav ja äärmiselt köitev. Sellepärast peate endale meelepärase leidmiseks kindlasti proovima...
OpenTTD õpetus
OpenTTD on seal üks populaarsemaid ärisimulatsioonimänge. Selles mängus peate looma suurepärase transpordiettevõtte. Alustate siiski alguses umbes 190...