„Linux“ sistemoje „systemctl“ atlieka pag­rin­di­nį vaidmenį ad­mi­nist­ruo­jant „init“ sistemą ir paslaugų tvarkyklę „systemd“. Naudodami „systemctl“, var­to­to­jai gali valdyti „systemd“ paslaugas, jų vienetus ir kon­fi­gū­ra­ci­jas, todėl tai yra ne­pa­kei­čia­mas įrankis sistemos ad­mi­nist­ra­vi­mui. Nuo paleidimo valdymo iki sistemos būsenų pri­tai­ky­mo – „systemctl“ siūlo platų funkcijų spektrą.

Kas yra „systemctl“?

„systemctl“ yra ko­man­di­nės eilutės įrankis, skirtas valdyti „systemd“ – „Linux“ ope­ra­ci­nių sistemų paleidimo sistemą ir sistemos tvarkyklę. „systemd“ šiuo metu yra stan­dar­ti­nė paleidimo sistema keliose „Linux“ dist­ri­bu­ci­jo­se ir „Linux“ serverių dist­ri­bu­ci­jo­se, tokiose kaip „Ubuntu“, „Debian“, „Fedora“, „Red Hat En­ter­pri­se Linux“ (RHEL), „CentOS“, „Arch Linux“, „Mageia“ ir „Gentoo“. Tačiau ji nėra vi­suo­ti­nai įdiegta visose dist­ri­bu­ci­jo­se.

„systemd“ eko­sis­te­mo­je „systemctl“ atlieka pag­rin­di­nį vaidmenį valdant sistemos paslaugas, kon­fi­gū­ra­ci­ją, paleidimo procesą ir atliekant sistemos priežiūrą. Šio įrankio funk­cio­na­lu­mas apima ne tik paslaugų paleidimą ir su­stab­dy­mą. Jis suteikia galimybę vi­sa­pu­siš­kai valdyti beveik visus Linux sistemos aspektus.

Šiame vadove rasite praktinių kodo pavyzdžių ir Linux komandų, skirtų dirbti su „systemctl“. Toliau pateikti pa­vyz­džiai parengti remiantis „Ubuntu 22.04“ versija.

Paslaugų valdymas

Pag­rin­di­nis „init“ sistemos tikslas – paleisti kom­po­nen­tus, kurie rei­ka­lin­gi po Linux bran­duo­lio paleidimo (vartotojo aplinkos kom­po­nen­tai). „Init“ sistema taip pat naudojama tam, kad būtų galima veiks­min­gai valdyti serverio paslaugas ir demonus bet kuriuo sistemos veikimo metu.

„systemd“ sistemoje dauguma procesų yra susiję su iš­tek­liais, kuriuos valdo sistema. Jie vadinami vienetais. Šie vienetai kla­si­fi­kuo­ja­mi pagal išteklių, kuriuos jie at­sto­vau­ja, tipą ir api­brė­žia­mi vienetų failuose. Vieneto tipą galima atpažinti pagal jo failo plėtinį.

Valdant paslaugas, svarbūs yra paslaugų vienetai, kurių pa­va­di­ni­mai baigiasi priesaga .service. Tačiau paslaugų valdymo komandose ne visada būtina naudoti šią priesagą. „systemd“ gali atpažinti, kad tokios komandos paprastai yra su­si­ju­sios su pa­slau­go­mis.

Paleisti ir su­stab­dy­ti paslaugas

Viena iš daž­niau­siai atliekamų užduočių Linux sistemoje naudojant „systemctl“ yra paslaugų pa­lei­di­mas ir su­stab­dy­mas. Šios funkcijos yra esminės sistemos ad­mi­nist­ra­vi­mui ir leidžia kont­ro­liuo­ti sistemoje vykdomus procesus. Norėdami paleisti paslaugą, naudokite komandą start. Jei dirbate kaip var­to­to­jas be ad­mi­nist­ra­to­riaus teisių, turėsite naudoti sudo.

$ sudo systemctl start application.service
bash

Kadangi „systemd“ yra sukurta taip, kad au­to­ma­tiš­kai ieškotų .service failų, skirtų paslaugų valdymo komandoms, šią komandą taip pat galima įvesti su­pa­pras­tin­ta forma:

$ sudo systemctl start application
bash

Pa­vyz­džiui, norėdami paleisti „Apache“ ži­nia­tink­lio serverį, įveskite:

$ sudo systemctl start apache2
bash

Jei norite su­stab­dy­ti vei­kian­čią paslaugą, naudokite stop:

$ sudo systemctl stop application.service
bash

Per­krau­ki­te ir at­nau­jin­ki­te

Norėdami iš naujo paleisti paslaugą, o tai dažnai būtina po kon­fi­gū­ra­ci­jos pakeitimų, naudokite komandą restart:

$ sudo systemctl restart application.service
bash

Jei programa gali iš naujo įkelti savo kon­fi­gū­ra­ci­jos failus be per­kro­vi­mo, šį procesą galima pradėti naudojant komandą reload “:

$ sudo systemctl reload application.service
bash

Jei nesate tikri, ar paslauga palaiko kon­fi­gū­ra­ci­jos per­kro­vi­mo funkciją, galite naudoti komandą reload-or-restart “. Jei ši funkcija palaikoma, komanda perkraus kon­fi­gū­ra­ci­ją. Jei ji ne­pa­lai­ko­ma, komanda iš naujo paleis paslaugą, kad būtų pradėtas kon­fi­gū­ra­ci­jos at­nau­ji­ni­mas.

$ sudo systemctl reload-or-restart application.service
bash

Įjungti ir išjungti paslaugas

Įjungdami ir iš­jung­da­mi paslaugas, galite nustatyti, ar paslauga turi būti pa­lei­džia­ma au­to­ma­tiš­kai paleidus sistemą. Tai ypač svarbu sistemos našumui, saugumui ir skirtingų paslaugų tar­pu­sa­vio pri­klau­so­my­bių valdymui. Naudokite komandą enable, kad su­kon­fi­gū­ruo­tu­mė­te au­to­ma­ti­nį paleidimą paleidus sistemą:

$ sudo systemctl enable application.service
bash

Atlikus šį veiksmą, su­ku­ria­mas sim­bo­li­nis 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ų au­to­ma­ti­niam pa­lei­di­mui. Paprastai tai vyksta kataloge /etc/systemd/system/some_target.target.wants.

$ sudo systemctl enable application.service
bash

Jei norite, kad paslauga nebūtų pa­lei­džia­ma au­to­ma­tiš­kai pa­lei­džiant kom­piu­te­rį, naudokite disable:

$ sudo systemctl disable application.service
bash

Po to bus pašalinta simbolinė nuoroda, nurodanti au­to­ma­ti­nį įjungimą pa­lei­džiant sistemą.

Įspėjimas: Vien tik įjungus paslaugą, ji nebus iškart paleista da­bar­ti­nė­je sesijoje. Norėdami iškart paleisti paslaugą ir nustatyti, kad ji pa­leis­tų­si au­to­ma­tiš­kai paleidus sistemą, turite įvykdyti abi komandas – start ir enable.

Pa­tik­rin­ki­te paslaugų būseną

Komanda „systemctl“ leidžia per­žiū­rė­ti in­for­ma­ci­ją apie paslaugų būseną. Tai ypač naudinga stebint ir dia­g­no­zuo­jant sistemos bei programų paslaugų dabartinę būseną. Pa­tik­rin­ti galite naudodami komandą status “:

$ systemctl status application.service
bash

Ši komanda pateikia įvairią in­for­ma­ci­ją, įskaitant paslaugos dabartinę būseną (aktyvi, neaktyvi, sugedusi ir pan.), paskutinį kartą vykdytus procesus ir žurnalo pra­ne­ši­mus, cgroup hie­rar­chi­ją bei pirmąsias žurnalo eilutes.

Norint pa­tik­rin­ti paslaugos veikimo būseną Linux sistemoje naudojant „systemctl“, nau­do­ja­mas is-active. Ši komanda nurodo, ar paslauga šiuo metu veikia, ar ne:

$ systemctl is-active application.service
bash

Paprastai dabartinė būsena nurodoma kaip active, jei paslauga aktyvi, arba kaip inactive, jei paslauga neaktyvi.

Norėdami pa­tik­rin­ti, ar paslauga yra su­kon­fi­gū­ruo­ta taip, kad būtų au­to­ma­tiš­kai įjungiama paleidus sistemą, galite naudoti komandą is-enabled. Tai ypač naudinga tvarkant paslaugų paleidimo nu­sta­ty­mus „Linux“ sistemoje.

$ systemctl is-enabled application.service
bash

Ši komanda nurodo, ar paslauga yra įjungta, ar išjungta, ir, at­si­žvelg­da­ma į atsakymą, ati­tin­ka­mai nustato išėjimo kodą „0“ arba „1“.

Taip pat galite naudoti komandą is-failed, kad pa­tik­rin­tu­mė­te, ar konkreti paslauga veikia su klaida:

$ systemctl is-failed application.service
bash

Jei vykdymas pavyko, išvedamas active. Jei įvyko klaida, bus rodomas failed. Jei įrenginys buvo su­stab­dy­tas są­mo­nin­gai, 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 ne­su­tei­kia in­for­ma­ci­jos apie dabartinę sistemos būklę. Yra įvairių „systemctl“ komandų, kurios gali pateikti būtent tokią in­for­ma­ci­ją.

list-units yra naudinga norint su­si­da­ry­ti bendrą vaizdą apie da­bar­ti­nius procesus Linux sistemoje:

$ systemctl list-units
bash

Vykdydami šią komandą, „systemctl“ parodys „systemd“ valdomų vienetų sąrašą. Šio sąrašo išvestyje pa­tei­kia­mos įvairios skiltys su konkrečia in­for­ma­ci­ja apie kiekvieną vienetą. Rodomos šios skiltys:

  • UNIT: Vieneto pa­va­di­ni­mas (daž­niau­siai imamas iš vieneto failo pa­va­di­ni­mo, pvz., „sshd.service“ – SSH demonui)
  • LOAD: Nurodo, ar vieneto failas buvo sėkmingai įkeltas; galimos reikšmės yra loaded, not-found arba error.
  • ACTIVE: Vieneto veiklos būsena, kuri gali kisti tarp tokių režimų kaip active, inactive, activating arba deactivating
  • SUB: Pavaldus veiklos statusas, su­tei­kian­tis daugiau in­for­ma­ci­jos apie vieneto būseną (pa­vyz­džiui, active vienetas gali turėti SUB statusą running, exited arba failed).
  • APRAŠYMAS: Trumpas vieneto aprašymas, dažnai at­spin­din­tis vieneto paskirtį ar funk­cio­na­lu­mą

Tačiau pagal nu­ma­ty­tuo­sius nu­sta­ty­mus ši komanda rodo tik aktyvius vienetus. Dėl to išvesties stul­pe­ly­je „LOAD“ paprastai rodomas loaded, o stul­pe­ly­je „ACTIVE“ – active. Naudojant pa­pil­do­mus žymeklius, „systemctl“ galima su­kon­fi­gū­ruo­ti taip, kad ji taip pat rodytų papildomą in­for­ma­ci­ją. Pa­vyz­džiui, naudojant žymeklį --all bus rodomi visi „systemd“ įkelti vienetai, ne­pri­klau­so­mai nuo jų da­bar­ti­nio aktyvumo būsenos.

$ systemctl list-units --all
bash

Rezultatą galima dar labiau pa­tiks­lin­ti naudojant pa­pil­do­mus žymeklius, pa­vyz­džiui, --state=, kad būtų fil­t­ruo­ja­mi konkretūs būsenos elementai iš ka­te­go­ri­jų „LOAD“, „ACTIVE“ arba „SUB“. Svarbu palikti žymeklį --all, kad būtų rodomi ir neaktyvūs elementai:

$ systemctl list-units --all --state=inactive
bash

Taip 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=service
bash

Iš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-files
bash

Ši komanda rodo įvairias vienetų failų būsenas. Šios būsenos nurodo, kaip ati­tin­ka­mi vienetai yra su­kon­fi­gū­ruo­ti, ypač at­si­žvel­giant į jų veikimą pa­lei­džiant sistemą. Daž­niau­sios būsenos yra

  • Įjungta: Įrenginys su­kon­fi­gū­ruo­tas taip, kad būtų au­to­ma­tiš­kai įjun­gia­mas paleidus sistemą.
  • Išjungta: įrenginys nėra su­kon­fi­gū­ruo­tas au­to­ma­tiš­kai paleisti paleidimo proceso metu.
  • Už­mas­kuo­ta: įrenginys yra visiškai išjungtas, todėl jo negalima paleisti nei rankiniu būdu, nei au­to­ma­tiš­kai.
  • Statinis: įrenginys ne­pa­lei­džia­mas sa­va­ran­kiš­kai, bet paprastai priklauso nuo kito įrenginio ir pa­lei­džia­mas tik šiame kontekste.

Padalinio valdymas

Viena iš pag­rin­di­nių „systemctl“ funkcijų yra vienetų valdymas. „systemctl“ siūlo įvairias naudingas komandas ir parinktis, kurios pa­leng­vi­na konk­re­čios in­for­ma­ci­jos apie atskirus vienetus gavimą ir jų valdymą.

Rodyti vieneto failą

Jei norite, kad konk­re­taus vieneto failo turinys būtų rodomas tie­sio­giai konsolėje, galite naudoti komandą cat. Pa­vyz­džiui, norėdami per­žiū­rė­ti tokios paslaugos kaip „ssh.service“ vieneto failą, įveskite:

$ systemctl cat ssh.service
bash

Rodyti pri­klau­so­my­bes

Jei nu­ro­dy­si­te list-dependencies, konk­re­taus modulio pri­klau­so­my­bės bus rodomos medžio struktūra. Komanda atrodo taip:

$ systemctl list-dependencies sshd.service
bash

Paprastai rodomos .target vieneto pri­klau­so­my­bės, at­spin­din­čios skir­tin­gas sistemos būsenas. Norėdami gauti išsamų, rekursyvų visų pri­klau­so­my­bių sąrašą, naudokite žymę --all.

Norėdami per­žiū­rė­ti at­virkš­ti­nes pri­klau­so­my­bes (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 pri­klau­so­my­bes, kurios prasideda prieš arba po minėto vieneto.

Vienetų pa­slė­pi­mas ir at­sklei­di­mas

Vieneto už­mas­ka­vi­mas iš esmės jį išjungia, todėl jo neįmanoma paleisti nei rankiniu būdu, nei au­to­ma­tiš­kai. Tai dažnai naudojama siekiant už­tik­rin­ti, kad paslauga ar vienetas nebūtų paleisti at­si­tik­ti­nai arba au­to­ma­tiš­kai dėl pri­klau­so­my­bių. Už­mas­ka­vi­mas at­lie­ka­mas sukuriant ati­tin­ka­mo vieneto failo simbolinę nuorodą į /dev/null naudojant komandą mask “:

$ sudo systemctl mask nginx.service
bash

Tai užtikrina, kad Nginx paslauga negalėtų būti paleista nei rankiniu būdu, nei au­to­ma­tiš­kai, kol ji veikia už­mas­kuo­ta­me režime.

Atšaukus už­blo­ka­vi­mą, vienetui pa­nai­ki­na­mas už­blo­kuo­to statuso statusas, todėl jį galima vėl paleisti įprastu būdu. Komanda už­blo­ka­vi­mui atšaukti yra unmask:

$ sudo systemctl unmask nginx.service
bash

Vienetų failų re­da­ga­vi­mas

„systemctl“ turi parinktis, lei­džian­čias pri­tai­ky­ti ir keisti vienetų failus. Šios funkcijos buvo įdiegtos „systemd“ 218 versijoje. Jei naudojate komandą edit, pa­si­rink­ta­me vienete esantis vieneto failas au­to­ma­tiš­kai ati­da­ro­mas redaguoti:

$ sudo systemctl edit nginx.service
bash

Re­da­guo­jant sukuriama tuščia byla, skirta pridėti arba pakeisti konk­re­čius nurodymus vieneto api­brė­ži­me. Kiek­vie­nam vienetui (pvz., nginx.service) kataloge /etc/systemd/system sukuriama pa­ka­ta­lo­gė, kurios pa­va­di­ni­me prie failo vardo pri­de­da­mas priesaga .d. Pa­teik­ta­me pavyzdyje pa­ka­ta­lo­gė būtų nginx.service.d.

Šiame pa­ka­ta­lo­gy­je sukuriama failas „override.conf “. Kai „systemd“ įkelia vienetą, jis sujungia šio fragmentų failo turinį su ori­gi­na­laus vieneto failu. Šiuo atveju pirmenybė teikiama fragmentų failo nu­ro­dy­mams. Norint apdoroti visą vieneto failą, galima naudoti žymę --full “:

$ sudo systemctl edit --full nginx.service
bash

Paspausus --full, esamas vieneto failas ati­da­ro­mas re­dak­to­riu­je, kad būtų galima jį redaguoti. Išeinant iš re­dak­to­riaus, sistema išsaugo redaguotą failą kataloge /etc/systemd/system.

Norėdami atšaukti savo atliktus pa­kei­ti­mus, galite ištrinti įrenginio kon­fi­gū­ra­ci­jos katalogą .d arba pakeistą failą, esantį /etc/systemd/system:

$ sudo rm -r /etc/systemd/system/nginx.service.d
bash

Visiškai per­žiū­rė­tą vieneto failą galima ištrinti šia komanda:

$ sudo rm /etc/systemd/system/nginx.service
bash

Pašalinus failą ar katalogą, reikės perkrauti „systemd“, kad jis ne­be­si­rem­tų į ištrintus failus, o naudotų pačios sistemos kopiją:

$ sudo systemctl daemon-reload
bash

Sistemos būsenos (veikimo lygio) nu­sta­ty­mas naudojant tikslus

„systemd“ pir­miau­sia naudoja „target“ funkciją, kad su­gru­puo­tų skir­tin­gus vienetus. Tai daroma siekiant pasiekti konkretų sistemos būseną, panašiai kaip ir kitų ini­ci­ja­vi­mo sistemų veikimo lygiai. Failai su priesaga .target veikia kaip orien­ta­ci­niai taškai, nu­ro­dan­tys tam tikrų funkcijų pri­ei­na­mu­mo būseną. Tai leidžia var­to­to­jams nurodyti pa­gei­dau­ja­mą bendrą būseną, o ne atskirus rei­ka­lin­gus vienetus.

Praktinis pavyzdys yra swap.target, kuri žymi pa­si­ren­gi­mą kei­ti­mui­si. Į keitimosi procesą įtraukti įren­gi­niai gali suderinti savo veiklą su šiuo tikslu naudodami tokias kon­fi­gū­ra­ci­jos parinktis kaip WantedBy= ar RequiredBy=. Kita vertus, įren­gi­niai, kurie priklauso nuo keitimosi, gali tai nurodyti naudodami tokius nu­sta­ty­mus kaip Wants=, Requires= ir After=, kad išreikštų savo pri­klau­so­my­bę ir paleidimo tvarką keitimosi atžvilgiu.

Nustatyti nu­ma­ty­tą­jį pa­skir­ties adresą

Nu­sta­ty­da­mi ir pa­rink­da­mi nu­ma­ty­tą­jį tikslą, galite nustatyti nu­ma­ty­tą­ją sistemos būseną paleidimo metu. Štai kaip rasti nu­ma­ty­tą­jį tikslą savo sistemai:

$ systemctl get-default
Output
multi-user.target
bash

Jei norite pakeisti nu­ma­ty­tą­jį tikslą, naudokite komandą set-default kartu su tikslo pa­va­di­ni­mu. Norėdami nustatyti nu­ma­ty­tą­jį tikslą graphical.target, kuris paleidžia grafinę vartotojo sąsają, naudokite šią komandą:

$ sudo systemctl set-default graphical.target
bash

Rodyti galimus kelionės tikslus

Norėdami per­žiū­rė­ti visus jūsų sistemoje esančius pa­skir­ties taškus, galite naudoti šią komandą:

$ systemctl list-unit-files --type=target
bash

Čia rodomas visų jūsų sistemoje įdiegtų tikslinės vieneto failų sąrašas. Prie kiekvieno tikslo nurodytas kelias ir dabartinė būsena (pvz., ak­ty­vuo­tas arba de­ak­ty­vuo­tas).

Išskirti tikslus

Naudodami isolate, galite vienu metu aktyvuoti visus vienetus, su­si­ju­sius su konkrečiu taikiniu, ir su­stab­dy­ti visus kitus vienetus, ne­su­si­ju­sius su juo.

Tarkime, kad dirbate aplinkoje, kurioje veikia graphical.target, ir norite pereiti į grynąjį dau­gia­var­to­to­jų režimą be grafinės vartotojo sąsajos. Tokiu atveju galite išjungti grafinę sistemą, izo­liuo­da­mi multi-user.target. Kadangi graphical.target priklauso nuo multi-user.target, bet ne at­virkš­čiai, pe­r­jun­giant visos grafinės paslaugos yra su­stab­do­mos.

Tačiau prieš izo­liuo­da­mi tikslą, tu­rė­tu­mė­te pa­tik­rin­ti su­si­ju­sias pri­klau­so­my­bes. Tai padės išvengti netyčinio svarbių procesų su­stab­dy­mo.

$ systemctl list-dependencies multi-user.target
bash

Jei pa­žy­mė­jo­te aktyvius vienetus, kuriuos norite išsaugoti, ir su jais sutinkate, galite nurodyti norimą pa­skir­ties vietą:

$ sudo systemctl isolate multi-user.target
bash

Spar­čio­sios nuorodos į svarbius įvykius

Yra nustatyti konkretūs komandų tikslai, skirti pag­rin­di­nėms ope­ra­ci­joms, pa­vyz­džiui, sistemos iš­jun­gi­mui ar pa­lei­di­mui iš naujo. Tačiau „Linux“ sistemoje „systemctl“ taip pat siūlo prak­tiš­kus spar­čiuo­sius klavišus, kurie suteikia papildomų funkcijų. Pa­vyz­džiui, norėdami perkelti sistemą į gelbėjimo režimą (vieno vartotojo režimą), galite tiesiog naudoti rescue vietoj isolate rescue.target:

$ sudo systemctl rescue
bash

Sistemą galite su­stab­dy­ti, surinkę stop:

$ sudo systemctl stop
bash

Galite pradėti visišką išjungimą, paspaudę poweroff:

$ sudo systemctl poweroff
bash

Kita vertus, per­kro­vi­mą galima ini­ci­juo­ti įvedus reboot:

$ sudo systemctl reboot
bash

Jei esate pri­si­jun­gę, šios komandos informuos jus apie ar­tė­jan­čius įvykius. Vien tik įvykdžius ar izoliavus tikslą, šios in­for­ma­ci­jos negausite. Svarbu žinoti, kad daugelis kom­piu­te­rių, siekdami už­tik­rin­ti teisingą komandų vykdymą, šias trum­pes­nes komandas susieja su „systemd“.

Paprastai sistemos per­kro­vi­mui pakanka šios komandos:

$ sudo reboot
bash
Go to Main Menu