Kaip naudoti „systemctl“ paslaugoms ir vienetams valdyti
„Linux“ sistemoje „systemctl“ atlieka pagrindinį vaidmenį administruojant „init“ sistemą ir paslaugų tvarkyklę „systemd“. Naudodami „systemctl“, vartotojai gali valdyti „systemd“ paslaugas, jų vienetus ir konfigūracijas, todėl tai yra nepakeičiamas įrankis sistemos administravimui. Nuo paleidimo valdymo iki sistemos būsenų pritaikymo – „systemctl“ siūlo platų funkcijų spektrą.
Kas yra „systemctl“?
„systemctl“ yra komandinės eilutės įrankis, skirtas valdyti „systemd“ – „Linux“ operacinių sistemų paleidimo sistemą ir sistemos tvarkyklę. „systemd“ šiuo metu yra standartinė paleidimo sistema keliose „Linux“ distribucijose ir „Linux“ serverių distribucijose, tokiose kaip „Ubuntu“, „Debian“, „Fedora“, „Red Hat Enterprise Linux“ (RHEL), „CentOS“, „Arch Linux“, „Mageia“ ir „Gentoo“. Tačiau ji nėra visuotinai įdiegta visose distribucijose.
„systemd“ ekosistemoje „systemctl“ atlieka pagrindinį vaidmenį valdant sistemos paslaugas, konfigūraciją, paleidimo procesą ir atliekant sistemos priežiūrą. Šio įrankio funkcionalumas apima ne tik paslaugų paleidimą ir sustabdymą. Jis suteikia galimybę visapusiškai valdyti beveik visus Linux sistemos aspektus.
Šiame vadove rasite praktinių kodo pavyzdžių ir Linux komandų, skirtų dirbti su „systemctl“. Toliau pateikti pavyzdžiai parengti remiantis „Ubuntu 22.04“ versija.
Paslaugų valdymas
Pagrindinis „init“ sistemos tikslas – paleisti komponentus, kurie reikalingi po Linux branduolio paleidimo (vartotojo aplinkos komponentai). „Init“ sistema taip pat naudojama tam, kad būtų galima veiksmingai valdyti serverio paslaugas ir demonus bet kuriuo sistemos veikimo metu.
„systemd“ sistemoje dauguma procesų yra susiję su ištekliais, kuriuos valdo sistema. Jie vadinami vienetais. Šie vienetai klasifikuojami pagal išteklių, kuriuos jie atstovauja, tipą ir apibrėžiami vienetų failuose. Vieneto tipą galima atpažinti pagal jo failo plėtinį.
Valdant paslaugas, svarbūs yra paslaugų vienetai, kurių pavadinimai baigiasi priesaga .service. Tačiau paslaugų valdymo komandose ne visada būtina naudoti šią priesagą. „systemd“ gali atpažinti, kad tokios komandos paprastai yra susijusios su paslaugomis.
Paleisti ir sustabdyti paslaugas
Viena iš dažniausiai atliekamų užduočių Linux sistemoje naudojant „systemctl“ yra paslaugų paleidimas ir sustabdymas. Šios funkcijos yra esminės sistemos administravimui ir leidžia kontroliuoti sistemoje vykdomus procesus. Norėdami paleisti paslaugą, naudokite komandą start. Jei dirbate kaip vartotojas be administratoriaus teisių, turėsite naudoti sudo.
$ sudo systemctl start application.servicebashKadangi „systemd“ yra sukurta taip, kad automatiškai ieškotų .service failų, skirtų paslaugų valdymo komandoms, šią komandą taip pat galima įvesti supaprastinta forma:
$ sudo systemctl start applicationbashPavyzdžiui, norėdami paleisti „Apache“ žiniatinklio serverį, įveskite:
$ sudo systemctl start apache2bashJei norite sustabdyti veikiančią paslaugą, naudokite stop:
$ sudo systemctl stop application.servicebashPerkraukite ir atnaujinkite
Norėdami iš naujo paleisti paslaugą, o tai dažnai būtina po konfigūracijos pakeitimų, naudokite komandą restart:
$ sudo systemctl restart application.servicebashJei programa gali iš naujo įkelti savo konfigūracijos failus be perkrovimo, šį procesą galima pradėti naudojant komandą reload “:
$ sudo systemctl reload application.servicebashJei nesate tikri, ar paslauga palaiko konfigūracijos perkrovimo funkciją, galite naudoti komandą reload-or-restart “. Jei ši funkcija palaikoma, komanda perkraus konfigūraciją. Jei ji nepalaikoma, komanda iš naujo paleis paslaugą, kad būtų pradėtas konfigūracijos atnaujinimas.
$ sudo systemctl reload-or-restart application.servicebashĮjungti ir išjungti paslaugas
Įjungdami ir išjungdami paslaugas, galite nustatyti, ar paslauga turi būti paleidžiama automatiškai paleidus sistemą. Tai ypač svarbu sistemos našumui, saugumui ir skirtingų paslaugų tarpusavio priklausomybių valdymui. Naudokite komandą enable, kad sukonfigūruotumėte automatinį paleidimą paleidus sistemą:
$ sudo systemctl enable application.servicebashAtlikus šį veiksmą, sukuriamas simbolinis nuorodas. Ši nuoroda nukreipia į sistemos paslaugos failo kopiją. Sistemos paslaugos failą paprastai galima rasti kataloge /lib/systemd/system arba /etc/systemd/system. Čia taip pat rasite kietajame diske esantį katalogą, kuriame „systemd“ ieško failų, skirtų automatiniam paleidimui. Paprastai tai vyksta kataloge /etc/systemd/system/some_target.target.wants.
$ sudo systemctl enable application.servicebashJei norite, kad paslauga nebūtų paleidžiama automatiškai paleidžiant kompiuterį, naudokite disable:
$ sudo systemctl disable application.servicebashPo to bus pašalinta simbolinė nuoroda, nurodanti automatinį įjungimą paleidžiant sistemą.
Įspėjimas: Vien tik įjungus paslaugą, ji nebus iškart paleista dabartinėje sesijoje. Norėdami iškart paleisti paslaugą ir nustatyti, kad ji paleistųsi automatiškai paleidus sistemą, turite įvykdyti abi komandas – start ir enable.
Patikrinkite paslaugų būseną
Komanda „systemctl“ leidžia peržiūrėti informaciją apie paslaugų būseną. Tai ypač naudinga stebint ir diagnozuojant sistemos bei programų paslaugų dabartinę būseną. Patikrinti galite naudodami komandą status “:
$ systemctl status application.servicebashŠi komanda pateikia įvairią informaciją, įskaitant paslaugos dabartinę būseną (aktyvi, neaktyvi, sugedusi ir pan.), paskutinį kartą vykdytus procesus ir žurnalo pranešimus, cgroup hierarchiją bei pirmąsias žurnalo eilutes.
Norint patikrinti paslaugos veikimo būseną Linux sistemoje naudojant „systemctl“, naudojamas is-active. Ši komanda nurodo, ar paslauga šiuo metu veikia, ar ne:
$ systemctl is-active application.servicebashPaprastai dabartinė būsena nurodoma kaip active, jei paslauga aktyvi, arba kaip inactive, jei paslauga neaktyvi.
Norėdami patikrinti, ar paslauga yra sukonfigūruota taip, kad būtų automatiškai įjungiama paleidus sistemą, galite naudoti komandą is-enabled. Tai ypač naudinga tvarkant paslaugų paleidimo nustatymus „Linux“ sistemoje.
$ systemctl is-enabled application.servicebashŠi komanda nurodo, ar paslauga yra įjungta, ar išjungta, ir, atsižvelgdama į atsakymą, atitinkamai nustato išėjimo kodą „0“ arba „1“.
Taip pat galite naudoti komandą is-failed, kad patikrintumėte, ar konkreti paslauga veikia su klaida:
$ systemctl is-failed application.servicebashJei vykdymas pavyko, išvedamas active. Jei įvyko klaida, bus rodomas failed. Jei įrenginys buvo sustabdytas sąmoningai, kaip atsakymas gali būti rodomas unknown arba inactive. Išeitimo kodas 0 reiškia, kad įvyko klaida, o 1 reiškia bet kokią kitą būseną.
Sistemos būsena
Iki šiol aptartos komandos buvo skirtos atskirų paslaugų valdymui. Tačiau šios komandos nesuteikia informacijos apie dabartinę sistemos būklę. Yra įvairių „systemctl“ komandų, kurios gali pateikti būtent tokią informaciją.
list-units yra naudinga norint susidaryti bendrą vaizdą apie dabartinius procesus Linux sistemoje:
$ systemctl list-unitsbashVykdydami šią komandą, „systemctl“ parodys „systemd“ valdomų vienetų sąrašą. Šio sąrašo išvestyje pateikiamos įvairios skiltys su konkrečia informacija apie kiekvieną vienetą. Rodomos šios skiltys:
- UNIT: Vieneto pavadinimas (dažniausiai imamas iš vieneto failo pavadinimo, pvz., „sshd.service“ – SSH demonui)
- LOAD: Nurodo, ar vieneto failas buvo sėkmingai įkeltas; galimos reikšmės yra
loaded,not-foundarbaerror. - ACTIVE: Vieneto veiklos būsena, kuri gali kisti tarp tokių režimų kaip
active,inactive,activatingarbadeactivating - SUB: Pavaldus veiklos statusas, suteikiantis daugiau informacijos apie vieneto būseną (pavyzdžiui,
activevienetas gali turėti SUB statusąrunning,exitedarbafailed). - APRAŠYMAS: Trumpas vieneto aprašymas, dažnai atspindintis vieneto paskirtį ar funkcionalumą
Tačiau pagal numatytuosius nustatymus ši komanda rodo tik aktyvius vienetus. Dėl to išvesties stulpelyje „LOAD“ paprastai rodomas loaded, o stulpelyje „ACTIVE“ – active. Naudojant papildomus žymeklius, „systemctl“ galima sukonfigūruoti taip, kad ji taip pat rodytų papildomą informaciją. Pavyzdžiui, naudojant žymeklį --all bus rodomi visi „systemd“ įkelti vienetai, nepriklausomai nuo jų dabartinio aktyvumo būsenos.
$ systemctl list-units --allbashRezultatą galima dar labiau patikslinti naudojant papildomus žymeklius, pavyzdžiui, --state=, kad būtų filtruojami konkretūs būsenos elementai iš kategorijų „LOAD“, „ACTIVE“ arba „SUB“. Svarbu palikti žymeklį --all, kad būtų rodomi ir neaktyvūs elementai:
$ systemctl list-units --all --state=inactivebashTaip pat galite naudoti filtrą --type=, kad būtų rodomi tam tikrų tipų vienetai, pvz., jei norite matyti tik aktyvius tarnybos vienetus:
$ systemctl list-units --type=servicebashIšvardyti visus vienetų failus
Norėdami peržiūrėti visų vienetų failų sąrašą Linux sistemoje naudojant „systemctl“ (įskaitant tuos, kurių „systemd“ nebandė įkelti), galite naudoti list-unit-files“. Ši komanda rodo visus vienetų failus, kuriuos „systemd“ atpažįsta, įskaitant paslaugas, lizdus, tikslus ir kt.
$ systemctl list-units-filesbashŠi komanda rodo įvairias vienetų failų būsenas. Šios būsenos nurodo, kaip atitinkami vienetai yra sukonfigūruoti, ypač atsižvelgiant į jų veikimą paleidžiant sistemą. Dažniausios būsenos yra
- Įjungta: Įrenginys sukonfigūruotas taip, kad būtų automatiškai įjungiamas paleidus sistemą.
- Išjungta: įrenginys nėra sukonfigūruotas automatiškai paleisti paleidimo proceso metu.
- Užmaskuota: įrenginys yra visiškai išjungtas, todėl jo negalima paleisti nei rankiniu būdu, nei automatiškai.
- Statinis: įrenginys nepaleidžiamas savarankiškai, bet paprastai priklauso nuo kito įrenginio ir paleidžiamas tik šiame kontekste.
Padalinio valdymas
Viena iš pagrindinių „systemctl“ funkcijų yra vienetų valdymas. „systemctl“ siūlo įvairias naudingas komandas ir parinktis, kurios palengvina konkrečios informacijos apie atskirus vienetus gavimą ir jų valdymą.
Rodyti vieneto failą
Jei norite, kad konkretaus vieneto failo turinys būtų rodomas tiesiogiai konsolėje, galite naudoti komandą cat. Pavyzdžiui, norėdami peržiūrėti tokios paslaugos kaip „ssh.service“ vieneto failą, įveskite:
$ systemctl cat ssh.servicebashRodyti priklausomybes
Jei nurodysite list-dependencies, konkretaus modulio priklausomybės bus rodomos medžio struktūra. Komanda atrodo taip:
$ systemctl list-dependencies sshd.servicebashPaprastai rodomos .target vieneto priklausomybės, atspindinčios skirtingas sistemos būsenas. Norėdami gauti išsamų, rekursyvų visų priklausomybių sąrašą, naudokite žymę --all.
Norėdami peržiūrėti atvirkštines priklausomybes (t. y. vienetus, kurie priklauso nuo nurodyto vieneto), komandai pridėkite --reverse. Žymės --before ir —after taip pat leidžia peržiūrėti priklausomybes, kurios prasideda prieš arba po minėto vieneto.
Vienetų paslėpimas ir atskleidimas
Vieneto užmaskavimas iš esmės jį išjungia, todėl jo neįmanoma paleisti nei rankiniu būdu, nei automatiškai. Tai dažnai naudojama siekiant užtikrinti, kad paslauga ar vienetas nebūtų paleisti atsitiktinai arba automatiškai dėl priklausomybių. Užmaskavimas atliekamas sukuriant atitinkamo vieneto failo simbolinę nuorodą į /dev/null naudojant komandą mask “:
$ sudo systemctl mask nginx.servicebashTai užtikrina, kad Nginx paslauga negalėtų būti paleista nei rankiniu būdu, nei automatiškai, kol ji veikia užmaskuotame režime.
Atšaukus užblokavimą, vienetui panaikinamas užblokuoto statuso statusas, todėl jį galima vėl paleisti įprastu būdu. Komanda užblokavimui atšaukti yra unmask:
$ sudo systemctl unmask nginx.servicebashVienetų failų redagavimas
„systemctl“ turi parinktis, leidžiančias pritaikyti ir keisti vienetų failus. Šios funkcijos buvo įdiegtos „systemd“ 218 versijoje. Jei naudojate komandą edit, pasirinktame vienete esantis vieneto failas automatiškai atidaromas redaguoti:
$ sudo systemctl edit nginx.servicebashRedaguojant sukuriama tuščia byla, skirta pridėti arba pakeisti konkrečius nurodymus vieneto apibrėžime. Kiekvienam vienetui (pvz., nginx.service) kataloge /etc/systemd/system sukuriama pakatalogė, kurios pavadinime prie failo vardo pridedamas priesaga .d. Pateiktame pavyzdyje pakatalogė būtų nginx.service.d.
Šiame pakatalogyje sukuriama failas „override.conf “. Kai „systemd“ įkelia vienetą, jis sujungia šio fragmentų failo turinį su originalaus vieneto failu. Šiuo atveju pirmenybė teikiama fragmentų failo nurodymams. Norint apdoroti visą vieneto failą, galima naudoti žymę --full “:
$ sudo systemctl edit --full nginx.servicebashPaspausus --full, esamas vieneto failas atidaromas redaktoriuje, kad būtų galima jį redaguoti. Išeinant iš redaktoriaus, sistema išsaugo redaguotą failą kataloge /etc/systemd/system.
Norėdami atšaukti savo atliktus pakeitimus, galite ištrinti įrenginio konfigūracijos katalogą .d arba pakeistą failą, esantį /etc/systemd/system:
$ sudo rm -r /etc/systemd/system/nginx.service.dbashVisiškai peržiūrėtą vieneto failą galima ištrinti šia komanda:
$ sudo rm /etc/systemd/system/nginx.servicebashPašalinus failą ar katalogą, reikės perkrauti „systemd“, kad jis nebesiremtų į ištrintus failus, o naudotų pačios sistemos kopiją:
$ sudo systemctl daemon-reloadbashSistemos būsenos (veikimo lygio) nustatymas naudojant tikslus
„systemd“ pirmiausia naudoja „target“ funkciją, kad sugrupuotų skirtingus vienetus. Tai daroma siekiant pasiekti konkretų sistemos būseną, panašiai kaip ir kitų inicijavimo sistemų veikimo lygiai. Failai su priesaga .target veikia kaip orientaciniai taškai, nurodantys tam tikrų funkcijų prieinamumo būseną. Tai leidžia vartotojams nurodyti pageidaujamą bendrą būseną, o ne atskirus reikalingus vienetus.
Praktinis pavyzdys yra swap.target, kuri žymi pasirengimą keitimuisi. Į keitimosi procesą įtraukti įrenginiai gali suderinti savo veiklą su šiuo tikslu naudodami tokias konfigūracijos parinktis kaip WantedBy= ar RequiredBy=. Kita vertus, įrenginiai, kurie priklauso nuo keitimosi, gali tai nurodyti naudodami tokius nustatymus kaip Wants=, Requires= ir After=, kad išreikštų savo priklausomybę ir paleidimo tvarką keitimosi atžvilgiu.
Nustatyti numatytąjį paskirties adresą
Nustatydami ir parinkdami numatytąjį tikslą, galite nustatyti numatytąją sistemos būseną paleidimo metu. Štai kaip rasti numatytąjį tikslą savo sistemai:
$ systemctl get-default
Output
multi-user.targetbashJei norite pakeisti numatytąjį tikslą, naudokite komandą set-default kartu su tikslo pavadinimu. Norėdami nustatyti numatytąjį tikslą graphical.target, kuris paleidžia grafinę vartotojo sąsają, naudokite šią komandą:
$ sudo systemctl set-default graphical.targetbashRodyti galimus kelionės tikslus
Norėdami peržiūrėti visus jūsų sistemoje esančius paskirties taškus, galite naudoti šią komandą:
$ systemctl list-unit-files --type=targetbashČia rodomas visų jūsų sistemoje įdiegtų tikslinės vieneto failų sąrašas. Prie kiekvieno tikslo nurodytas kelias ir dabartinė būsena (pvz., aktyvuotas arba deaktyvuotas).
Išskirti tikslus
Naudodami isolate, galite vienu metu aktyvuoti visus vienetus, susijusius su konkrečiu taikiniu, ir sustabdyti visus kitus vienetus, nesusijusius su juo.
Tarkime, kad dirbate aplinkoje, kurioje veikia graphical.target, ir norite pereiti į grynąjį daugiavartotojų režimą be grafinės vartotojo sąsajos. Tokiu atveju galite išjungti grafinę sistemą, izoliuodami multi-user.target. Kadangi graphical.target priklauso nuo multi-user.target, bet ne atvirkščiai, perjungiant visos grafinės paslaugos yra sustabdomos.
Tačiau prieš izoliuodami tikslą, turėtumėte patikrinti susijusias priklausomybes. Tai padės išvengti netyčinio svarbių procesų sustabdymo.
$ systemctl list-dependencies multi-user.targetbashJei pažymėjote aktyvius vienetus, kuriuos norite išsaugoti, ir su jais sutinkate, galite nurodyti norimą paskirties vietą:
$ sudo systemctl isolate multi-user.targetbashSparčiosios nuorodos į svarbius įvykius
Yra nustatyti konkretūs komandų tikslai, skirti pagrindinėms operacijoms, pavyzdžiui, sistemos išjungimui ar paleidimui iš naujo. Tačiau „Linux“ sistemoje „systemctl“ taip pat siūlo praktiškus sparčiuosius klavišus, kurie suteikia papildomų funkcijų. Pavyzdžiui, norėdami perkelti sistemą į gelbėjimo režimą (vieno vartotojo režimą), galite tiesiog naudoti rescue vietoj isolate rescue.target:
$ sudo systemctl rescuebashSistemą galite sustabdyti, surinkę stop:
$ sudo systemctl stopbashGalite pradėti visišką išjungimą, paspaudę poweroff:
$ sudo systemctl poweroffbashKita vertus, perkrovimą galima inicijuoti įvedus reboot:
$ sudo systemctl rebootbashJei esate prisijungę, šios komandos informuos jus apie artėjančius įvykius. Vien tik įvykdžius ar izoliavus tikslą, šios informacijos negausite. Svarbu žinoti, kad daugelis kompiuterių, siekdami užtikrinti teisingą komandų vykdymą, šias trumpesnes komandas susieja su „systemd“.
Paprastai sistemos perkrovimui pakanka šios komandos:
$ sudo rebootbash