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]
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:
- kelių vartotojų.target: kai serveris yra gerai ir yra pasirengęs paleisti komandų eilutės programas
- grafinis.target: kai GNOME ar KDE yra parengti
- 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:
- 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.
- Š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.shNe 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-internetasGrupė = 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:
- Programa gali tiesiogiai skaityti aplinkos kintamąjį.
- 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 / aplinkaIr / etc / penguin-web-app / aplinkos faile yra:
LISTEN_PORT = 8080Tada 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-reloadGerai, 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!