systemd

sistemos sistemos vieneto failas, sukuriantis paslaugą

sistemos sistemos vieneto failas, sukuriantis paslaugą
Paslaugų valdymas yra tai, apie ką net nesusimąstote, kai kasdien naudojate „Linux“ darbo stotį ar „Linux“ serverį, tačiau kai jo nėra, jūs jo tikrai nekęsite. Kai kuriate, pavyzdžiui, naują serverio programą, kurią reikia paleisti visą parą, visą parą, šis iššūkis be paslaugų valdymo yra košmaras, kai jūs patys sukuriate mažą paslaugų sistemą, kuri, žinoma, nebus tokia gera, kaip valdytojo sukurtas valdytojas. vis tiek metų komanda.

Savo paslaugomis „systemd“ visa tai palengvina, iš tiesų palengvina. Kai tik norite, kad kažkas stebėtų jūsų programą ir būtų lengva ją valdyti, „Systemd“ yra kelias, kurį aš čia paaiškinsiu!

Kur yra „Systemd“ paslaugos

Norėdami pridėti naują paslaugą, turite atsakyti į šį klausimą. Kaip visada sistemoje, tai priklauso nuo to, ar paslauga skirta tik jūsų vartotojui, ar visai sistemai. Mes sutelksime dėmesį į tai, kaip sistema veikia visos sistemos paslaugos.

Tiksli vieta priklauso nuo to, kodėl ir kaip paslauga buvo įdiegta. Jei paslaugą įdiegia paketų tvarkyklė, ji paprastai bus / usr / lib / systemd / system. Savo kuriamai programinei įrangai arba toms, kurios pačios nepalaiko „systemd“, įdėsite paslaugos failą į / usr / local / lib / systemd / system. Nepamirškite, kad kai kurie paskirstymai nepalaiko šio aplanko aplanke / usr / local. Galiausiai, jei norite sukonfigūruoti esamą „systemd“ paslaugą, kelias yra / etc / systemd / system.

Šiuose aplankuose galite rasti kelis failų plėtinius, tokius kaip *.lizdas, *.taikinys arba *.paslaugą. Akivaizdu, kad mes sutelksime dėmesį į paskutinį. "systemd" naudoja failo pavadinimą kaip paslaugos pavadinimą ją paleidžiant ar sustabdant ir pan. Taigi paprastai naudojamuose failų pavadinimuose yra tik raidiniai ir skaitiniai simboliai, brūkšniai ir pabraukimai. Kūrimo metu rekomenduoju jį sukurti savo dokumentuose, o kai atliksite, nukopijuokite jį į sistemos vietą, kad išvengtumėte problemų, jei išsaugotumėte viduryje redagavimo.

Gerai, todėl sukurkite savo paslaugų failą savo dokumentuose. Dabar mes pasirengę peržiūrėti, kaip rašyti šį failą.
[Pastaba: žr. Galimą klaidos pranešimą šio tinklaraščio įrašo komentarų skyriuje]

[Vienetas]
Aprašas = „Penguins“ žiniatinklio programos HTTP serveris (veikia 8080 prievade)
WantedBy = daugeliui vartotojų.taikinys
 
[Paslauga]
Tipas = paprastas
ExecStart = / usr / bin / python3 / usr / local / bin / pingvinas-web-app / main.py
Paleisti iš naujo = visada

Failo formatas iš tikrųjų yra artimas ini. Žinau, kad gali būti keista, nes „ini“ failai dažnai randami „Windows“ sistemoje, tačiau taip jis veikia. Aptarnavimo byla pirmiausia padalijama į 2 skyrius: [Unit] ir [Service]. Kiekviename skyriuje konfigūruojamas konkretus „systemd“ aspektas: [Unit] yra elementai, kuriuos bendrina visi systemd unit failai, o [Service] yra skirtas tik konfigūracijai, skirtai naujos paslaugos nustatymui.

Tada skyriuje sukonfigūruojamos tokios ypatybės kaip „Description =“ arba „ExecStart =“. Vertę nuo ypatybės pavadinimo skiria lygybės ženklas = be tarpo.

Grįžkime prie aukščiau rodyto failo. Ji apibūdina paslaugą, skirtą paleisti „Python“ parašytą žiniatinklio programą apie pingvinus. „systemd“ jį paleis iš naujo, kai tik procesas išeis ir paleidus serverį paleidus serverį, jei jį įgalinsite naudodami komandą „systemctl enable“. Šaunu eh?

Bet galbūt jūs esate kita jūsų žiniatinklio programa ne apie pingvinus - ir tai gaila - ir tai nėra parašyta „Python“. Tokiu atveju norėsite sužinoti daugiau apie galimas konfigūracijas.

„Systemd Services“ ypatybės

Pirmiausia sutelkime dėmesį į [Unit] ypatybes:

Aprašymas = yra tik aiškus paslaugos aprašymo aprašymas. Jis rodomas paslaugų sąraše, paslaugų žurnaluose, todėl norite, kad jis būtų aprašomasis, bet turėtų likti vienoje eilutėje ir viename sakinyje.

WantedBy = leidžia pasakyti systemd: kai šis dalykas pradedamas, paleidžiu ir mane. Paprastai nurodysite taikinio pavadinimą. Bendrų taikinių pavyzdžiai:

  1. kelių vartotojų.target: kai serveris yra gerai ir yra pasirengęs paleisti komandų eilutės programas
  2. grafinis.target: kai GNOME ar KDE yra parengti
  3. tinklo sujungimas.tikslas: kai serveris tinkamai prijungtas prie tinklo

Gerai pradžioje šios [vieneto] savybės yra pakankamos. Pažvelkime į [Paslaugą] dabar.

Tipas = padeda sistemai sužinoti, ar paslauga veikia. Čia yra įprasti tipai:

  1. turbūt dažniausiai naudojamas paprastas: „systemd“ jūsų vykdomą procesą laiko paslaugą teikiančiu procesu. Jei procesas sustoja, laikoma, kad paslauga taip pat sustabdyta ir kt.
  2. Šakavimas yra pageidautinas toms programoms, kurios buvo parašytos kaip serveris, tačiau be paslaugų valdymo sistemos pagalbos. Iš esmės ji tikisi, kad pradėtas procesas išsišakos, ir ši šakutė laikoma galutiniu paslaugos procesu. Norėdami būti tikslesni, taip pat galite padėti sistemai su PID rinkmena, kur stebimo proceso PID parašo paleista programa.

„ExecStart =“ yra bene svarbiausias paslaugai: tiksliai nurodoma, kokią programą paleisti paleidžiant paslaugą. Kaip matote „Penguin“ tarnyboje, aš iš karto naudojau / usr / bin / python3, o ne python3. Taip yra todėl, kad „systemd“ dokumentuose aiškiai rekomenduojama naudoti absoliučius kelius, kad būtų išvengta staigmenų.

Bet tai taip pat ir dėl kitos priežasties. Kitų paslaugų valdymo sistema dažniausiai remiasi „Shell“ scenarijais. Tačiau „systemd“ dėl našumo priežasčių pagal nutylėjimą neveikia apvalkalo. Taigi negalite tiesiogiai pateikti „shell“ komandos naudodami „ExecStart =“. Tačiau vis tiek galite naudoti apvalkalo scenarijų atlikdami:

ExecStart = / usr / bin / bash / usr / local / bin / launch-pingvinas-serveris.sh

Ne taip sunku? Atkreipkite dėmesį, kad jei norite paleisti tam tikrą procesą, norėdami pranešti, kad jūsų tarnyba švariai sustoja, egzistuoja „ExecStop =“, taip pat „ExecReload =“ - paslaugų perkėlimui.

Paleisti iš naujo = leidžia aiškiai pasakyti, kada paslauga turėtų būti paleista iš naujo. Tai yra viena iš svarbių „systemd“ savybių: ji užtikrina, kad jūsų paslauga išliks tiek ilgai, kiek norite, todėl atkreipkite dėmesį į šią parinktį.

Paleisti iš naujo = Reikšmė
visada „systemd“ ją paleidžia iš naujo, kai tik ji nutrūksta ar užstringa. Na, kol nepadarysite systemctl stop service-name.paslaugą.

Tai puikiai tinka serveriams ir internetinėms paslaugoms, nes jums labiau patinka nenaudingi iš naujo paleisti įrenginius, o ne rankiniu būdu paleisti paslaugą be jokios priežasties.

nenormalus Sugedus aptarnavimo procesui, iš naujo paleiskite paslaugą. Tačiau, jei programa išeina švariai, nepaleiskite jos iš naujo.

Tai naudingiau tiems „Cron“ darbams, kaip paslaugos, kurioms reikia patikimai atlikti užduotį, bet nereikia nuolat vykdyti.

dėl nesėkmės Panašiai kaip nenormalu, tačiau ji taip pat iš naujo paleidžia paslaugą, kai programa išeina švariai, bet su nulio nuliniu išėjimo kodu. Nuliniai išėjimo kodai paprastai reiškia klaidą.
ne systemd nepaleis paslaugos iš naujo automatiškai.

Paprastai naudinga norint gauti prieigą prie kitų „systemd“ funkcijų, tokių kaip registravimasis be iš naujo paleistos funkcijos.

„WorkingDirectory =“ gali priversti veikiantį katalogą paleidus programą. Vertė turi būti absoliutus katalogo kelias. Darbinis katalogas naudojamas, kai programos kode naudojate santykinius kelius. Mūsų pingvinų tarnybai tai gali būti:

WorkingDirectory = / srv / pingvinas-internetinė programa /

Tada saugumas yra svarbus, todėl paprastai nenorite paleisti savo paslaugos su root teisėmis. „User =“ ir „Group =“ leidžia nustatyti vartotojo ar grupės pavadinimą arba UID / GID, pagal kurį bus paleista jūsų programa. Pavyzdžiui:

Vartotojas = pingvinas-internetas
Grupė = pingvinas-internetas

EnvironmentFile = yra galinga parinktis. Programoms, veikiančioms kaip paslaugos, dažnai reikia konfigūracijos, o aplinkos failai leidžia ją nustatyti dviem būdais:

  1. Programa gali tiesiogiai skaityti aplinkos kintamąjį.
  2. Bet taip pat galite nustatyti skirtingus komandinės eilutės argumentus savo programai nekeisdami paslaugos failo.

Šio failo sintaksė yra paprasta: įvedate aplinkos kintamojo pavadinimą, lygybės ženklą = ir tada jo vertę. Tada į aplinkos failo ypatybę įtraukiate absoliutų aplinkos failo kelią.

Taigi pavyzdys:

Aplinkos byla = / etc / pingvinas-interneto programa / aplinka

Ir / etc / penguin-web-app / aplinkos faile yra:

LISTEN_PORT = 8080

Tada mūsų pingvinų žiniatinklio programa turės prieigą prie aplinkos kintamojo LISTEN_PORT ir klausysis laukiamo uosto.

Išsaugokite ir paleiskite naujai sukurtą „Systemd“ paslaugą

Taigi, jei laikėtės mano patarimo, redagavote savo tarnybos failą savo namų kataloge. Kai būsite patenkinti, nukopijuokite šį failą į / usr / local / lib / systemd / system, darant prielaidą, kad jūsų platinimas palaiko tą kelią. Aptarnavimo failo vardas bus jo paslaugos pavadinimas. Šis failo vardas turi baigtis .paslaugą. Pavyzdžiui, mūsų pingvinų serveriui tai būtų pingvinas-internetinė programa.paslaugą.

Tada jūs turite pasakyti systemd, kad pridėjote naują paslaugą, todėl turite įvesti šią komandą:

$ sudo systemctl daemon-reload

Gerai, dabar systemd žino apie jūsų naują paslaugą, darant prielaidą, kad jūsų faile nėra sintaksės klaidos. Galų gale, tai yra jūsų pirmasis failas, todėl tikėtina, kad padarysite klaidų. Šią komandą turite paleisti aukščiau kiekvieną atnaujindami savo paslaugų failą.

Dabar laikas pradėti paslaugą:

$ sudo systemctl start pingvinas-internetinė programa.paslaugą

Jei nepavyksta naudojant „Unit not found“ klaidą, pvz .:

$ sudo systemctl start pingvinas-internetinė programa.paslaugą
Nepavyko paleisti pingvino-žiniatinklio programos.paslauga: vienetas nerastas.

Tai reiškia, kad jūsų platinimas nepalaiko katalogo arba netinkamai pavadinote savo paslaugų failą. Būtinai patikrinkite.

Jei nustatėte paslaugą naudodami „WantedBy =“ ir norite, kad paslauga būtų paleista automatiškai, turite ją įgalinti naudodami šią komandą:

$ sudo systemctl įgalina pingviną-internetinę programą.paslaugą

Šauniausia paslauga yra ta, kad ji veikia fone. Problema: kaip sužinoti, ar jis veikia tinkamai, ar veikia, jei jis veikia fone? Nesijaudinkite, sistemos komanda taip pat pagalvojo ir pateikė komandą, kad patikrintų, ar ji veikia tinkamai, nuo kiek laiko ir tt:

$ systemctl status pingvinas-internetinė programa.paslaugą

Išvada

Sveikinimai! Dabar galite tvarkyti savo programas, nesirūpindami kaskart iš naujo paleisti iš naujo. Dabar rekomenduoju perskaityti kitą mūsų straipsnį apie systemd žurnalus: Master journalctl: suprasti systemd žurnalus. Tai galite naudoti galingą registravimo sistemą naujoje tarnyboje ir sukurti patikimesnius serverius!

5 populiariausi „Linux“ skirtų ergonomiškų kompiuterinių pelių produktai
Ar ilgalaikis kompiuterio naudojimas sukelia riešo ar pirštų skausmą?? Ar jūs kenčiate nuo sąnarių standumo ir nuolat turite paspausti rankas? Ar jauč...
How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Peržiūrėkite pelės mygtukus skirtingai programinei įrangai naudodami „X-Mouse Button Control“
Galbūt jums reikia įrankio, kuris galėtų pakeisti jūsų pelės valdymą kiekvienoje jūsų naudojamoje programoje. Tokiu atveju galite išbandyti programą, ...