Linuxis mängib systemctl keskset rolli alg­laa­di­mis­süs­teemi ja tee­nus­te­hal­duri systemd hal­da­misel. Systemctl abil saavad kasutajad hallata systemd teenuseid, nende üksusi ja sea­dis­tusi, mis teeb sellest süs­tee­mi­hal­duse jaoks asen­da­matu tööriista. Alates käi­vi­ta­mise juh­ti­mi­sest kuni süsteemi sei­sun­dite ko­han­da­miseni pakub systemctl laia funkt­sioo­nide valikut.

Mis on systemctl?

systemctl on käsurea tööriist, mille abil hallata systemd-d – Linuxi ope­rat­sioo­ni­süs­teemide alg­laa­di­mis­süs­teemi ja süs­tee­mi­hal­du­rit. systemd on praegu stan­dardne alg­laa­di­mis­süs­teem mitmetes Linuxi dist­ri­but­sioo­ni­des ja Linuxi ser­ve­ri­dist­ri­but­sioo­ni­des, nagu Ubuntu, Debian, Fedora, Red Hat En­terprise Linux (RHEL), CentOS, Arch Linux, Mageia ja Gentoo. Siiski ei ole see kõigis dist­ri­but­sioo­ni­des ühtlaselt ka­su­tusele võetud.

Systemd-öko­süs­tee­mis täidab systemctl keskset rolli süs­tee­mi­tee­nuste hal­da­misel, kon­fi­gu­ree­ri­misel, käi­vi­ta­misel ja süsteemi hool­da­misel. Selle tööriista funkt­sio­naal­sus ulatub kaugemale teenuste lihtsast käi­vi­ta­mi­sest ja pea­ta­mi­sest. See võimaldab Linuxi süsteemi peaaegu kõigi aspektide põh­ja­likku haldamist.

Järgnevas juhendis leiad prak­tilisi koo­di­näi­teid ja Linuxi käske systemctl ka­su­ta­miseks. Allpool toodud näited põhinevad Ubuntu 22.04-l.

Teenuste haldus

Init-süsteemi peamine eesmärk on käivitada kom­po­nen­did, mida on vaja pärast Linuxi tuuma käi­vi­ta­mist (ka­su­ta­ja­kesk­konda kuuluvad kom­po­nen­did). Init-süsteemi ka­su­ta­takse ka teenuste ja taust­prot­ses­side tõhusaks juh­ti­miseks serveris süsteemi töötamise mis tahes etapis.

Systemd-s kes­ken­du­vad enamik protsesse süsteemi poolt hal­la­ta­va­tele res­surs­si­dele. Neid ni­me­ta­takse üksusteks. Need üksused lii­gi­ta­takse vastavalt ressursi tüübile, mida nad esindavad, ning need on mää­rat­le­tud ük­sus­fai­li­des. Üksuse tüübi saab ära tunda fai­li­laiendi järgi.

Teenuste hal­da­misel on olulised tee­nu­se­ük­su­sed, mille nimi lõpeb laiendiga .service. Teenuste haldamise käskude puhul ei ole aga alati vaja seda laiendit kasutada. systemd suudab ära tunda, et sellised käsud viitavad üldjuhul tee­nus­tele.

Teenuste käi­vi­ta­mine ja peatamine

Üks le­vi­nu­maid üles­an­deid, mida Linuxis systemctl abil täi­de­takse, on teenuste käi­vi­ta­mine ja peatamine. Need funkt­sioo­nid on süs­tee­miad­mi­nist­ree­ri­mise aluseks ning või­mal­da­vad teil kont­rol­lida süsteemis töötavaid protsesse. Teenuse käi­vi­ta­miseks kasutage käsku start. Kui töötate ka­su­ta­jana, kellel puuduvad root-õigused, peate kasutama sudo.

$ sudo systemctl start application.service
bash

Kuna systemd on loodud teenuste haldamise käskude jaoks au­to­maat­selt .service-faile otsima, võib käsu sisestada ka liht­sus­ta­tud kujul:

$ sudo systemctl start application
bash

Näiteks Apache vee­bi­ser­veri käi­vi­ta­miseks si­ses­tak­site järgmise käsu:

$ sudo systemctl start apache2
bash

Kui soovid käi­mas­ole­vat teenust peatada, kasuta käsku stop:

$ sudo systemctl stop application.service
bash

Taas­käi­vita ja lae uuesti

Teenuse taas­käi­vi­ta­miseks, mis on sageli vajalik pärast kon­fi­gu­rat­siooni muutmist, kasuta käsku restart:

$ sudo systemctl restart application.service
bash

Kui rakendus suudab oma kon­fi­gu­rat­sioo­ni­faile uuesti laadida ilma taas­käi­vi­ta­miseta, saab protsessi käi­vi­ta­miseks kasutada käsku reload:

$ sudo systemctl reload application.service
bash

Kui te ei ole kindel, kas teenus toetab kon­fi­gu­rat­siooni uuesti laadimist, võite kasutada käsku reload-or-restart. See laadib kon­fi­gu­rat­siooni uuesti, kui see võimalus on toetatud. Kui seda võimalust ei toetata, taas­käi­vi­tab käsk teenuse, et algatada kon­fi­gu­rat­siooni uuen­da­mine.

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

Teenuste ak­ti­vee­ri­mine ja deak­ti­vee­ri­mine

Teenuste ak­ti­vee­ri­mise ja deak­ti­vee­ri­mise abil saate määrata, kas teenus peaks süsteemi käi­vi­ta­misel au­to­maat­selt käivituma. See on eriti oluline süsteemi jõudluse, tur­va­li­suse ja erinevate teenuste vaheliste sõl­tu­vuste haldamise sei­su­ko­halt. Kasutage käsku enable, et sea­dis­tada au­to­maatne käi­vi­ta­mine süsteemi käi­vi­ta­misel:

$ sudo systemctl enable application.service
bash

Selle protsessi käigus luuakse süm­bo­li­line link. See link ühendab süs­tee­mi­tee­nuse faili koopia. Süs­tee­mi­tee­nuse fail asub ta­va­li­selt ka­ta­loo­gis /lib/systemd/system või /etc/systemd/system. Sealt leiad ka kõ­va­ket­tal asuva kataloogi, kust systemd otsib au­to­maatse käi­vi­ta­mise faile. See asub ta­va­li­selt ka­ta­loo­gis /etc/systemd/system/some_target.target.wants.

$ sudo systemctl enable application.service
bash

Et teenus ei käivituks süsteemi käi­vi­ta­misel au­to­maat­selt, kasuta disable:

$ sudo systemctl disable application.service
bash

Seejärel kus­tu­ta­takse süm­bo­li­line link, mis määrab au­to­maatse käi­vi­ta­mise süsteemi käi­vi­ta­misel.

Tä­he­le­pa­nek: teenuse lihtsalt ak­ti­vee­ri­mine ei käivita seda kohe käi­mas­ole­vas ses­sioo­nis. Et teenus kohe käivitada ja sea­dis­tada nii, et see käivituks au­to­maat­selt süsteemi käi­vi­ta­misel, tuleb täita nii käsk start kui ka käsk enable.

Vaata teenuste staatust

systemctl võimaldab kuvada teavet teenuste seisundi kohta. See on eriti kasulik süsteemi- ja ra­ken­dus­tee­nuste het­ke­olu­korra jäl­gi­miseks ja diag­noo­si­miseks. Kasutage kont­rol­li­miseks käsku status:

$ systemctl status application.service
bash

See käsk annab mit­me­su­gust teavet, seal­hul­gas teenuse praeguse seisundi (aktiivne, mit­te­ak­tiivne, rikkis jne), viimati käi­vi­ta­tud prot­ses­side ja lo­gi­sõ­nu­mite, cgroupi hierarhia ning esimeste lo­gi­ri­dade kohta.

Linuxis teenuse het­keak­tiiv­suse kont­rol­li­miseks ka­su­ta­takse systemctl-i abil is-active. See käsk näitab, kas teenus on hetkel aktiivne või mitte:

$ systemctl is-active application.service
bash

Kui teenus on aktiivne, mää­ra­takse selle het­ke­olekuks ta­va­li­selt väärtus active, kui teenus on mit­te­ak­tiivne, siis väärtus inactive.

Selleks et kont­rol­lida, kas teenus on sea­dis­ta­tud süsteemi käi­vi­ta­misel au­to­maat­selt sisse lülituma, võid kasutada käsku is-enabled. See on eriti kasulik teenuste käi­vi­ta­mis­sea­dete hal­da­miseks Linuxi süsteemis.

$ systemctl is-enabled application.service
bash

Käsk näitab, kas teenus on ak­ti­vee­ri­tud või deak­ti­vee­ri­tud, ning määrab vastavalt vastusele väl­ju­mis­koo­diks „0“ või „1“.

Samuti saate käsuga is-failed kont­rol­lida, kas mõnel konk­reet­sel teenusel on veatunnus:

$ systemctl is-failed application.service
bash

Kui käsk täi­de­takse edukalt, väl­jas­ta­takse active. Vea korral on koodiks failed. Kui seade peatati taht­li­kult, võib vastuseks olla unknown või inactive. Lõ­pe­ta­mis­kood 0 tähistab vea tekkimist, 1 aga muud seisundit.

Süsteemi seisund

Seni tut­vus­ta­tud käsud on kes­ken­du­nud üksikute teenuste hal­da­misele. Need käsud ei anna aga ülevaadet süsteemi het­ke­olu­kor­rast. On olemas mit­me­su­gu­seid systemctl-käskusid, mis suudavad just sellist teavet pakkuda.

list-units on kasulik, et saada ülevaade Linuxis hetkel käi­vi­ta­tud prot­ses­si­dest:

$ systemctl list-units
bash

Kui käsk systemctl käi­vi­ta­takse, kuvab see systemd poolt hal­la­ta­vate üksuste nimekirja. Selle nimekirja väljund sisaldab mitmeid veerge, milles on esitatud iga üksuse kohta konk­reet­set teavet. Kuvatakse järgmised veerud:

  • UNIT: Üksuse nimi (see võetakse sageli üksuse failini­mest, nt sshd.service SSH-daemoni puhul)
  • LOAD: Näitab, kas üksuse fail laaditi edukalt; või­ma­li­kud väärtused on loaded, not-found või error.
  • ACTIVE: Üksuse ak­tiiv­suse staatus, mis võib vahelduda režiimide vahel, nagu active, inactive, activating või deactivating
  • SUB: Alluv te­ge­vusstaa­tus, mis annab täien­da­vat teavet üksuse seisundi kohta (näiteks üksusel active võib SUB-staa­tu­seks olla running, exited või failed).
  • DESC­RIP­TION: Üksuse lü­hi­kir­jel­dus, mis peegeldab sageli üksuse otstarvet või funkt­sio­naal­sust

Kuid käsu vaikimisi seadistus näitab ainult ak­tiiv­seid üksusi. Seetõttu on väljundi veerus „LOAD“ ta­va­li­selt näha loaded ja veerus „ACTIVE“ active. Li­sa­mär­kide abil saab systemctl-i sea­dis­tada nii, et see kuvaks ka täien­da­vat teavet. Näiteks märgi --all ka­su­ta­misel kuvatakse kõik systemd poolt laaditud üksused, sõltumata nende prae­gu­sest ak­tiiv­suse sei­sun­dist.

$ systemctl list-units --all
bash

Väljundit saab veelgi täp­sus­tada, kasutades lisamärke, näiteks --state=, et filt­ree­rida LOAD-, ACTIVE- või SUB-ka­te­goo­riate konk­reet­seid sei­sundeid. Oluline on jätta märk --all alles, et kuvataks ka mit­te­ak­tiiv­sed seadmed:

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

Võite kasutada ka filtrit --type=, et kuvada teatud tüüpi üksusi, näiteks kui soovite näha ainult aktiivses tee­nis­tuses olevaid üksusi:

$ systemctl list-units --type=service
bash

Näita kõiki ük­sus­faile

Kui soovid Linuxis systemctl-i abil kuvada kõigi ük­sus­fai­lide nimekirja (sh need, mida systemd pole veel laadida proovinud), võid kasutada list-unit-files. See käsk kuvab kõik ük­sus­fai­lid, millest systemd on teadlik, seal­hul­gas teenused, pis­ti­ku­pe­sad, siht­mär­gid ja muud.

$ systemctl list-units-files
bash

Käsk kuvab üksuste failide erinevad seisundid. Need seisundid näitavad, kuidas vastavad üksused on kon­fi­gu­ree­ri­tud, eelkõige seoses nende käi­tu­mi­sega süsteemi käi­vi­ta­misel. Kõige levinumad seisundid on

  • Lubatud: Seade on sea­dis­ta­tud nii, et see käivitub au­to­maat­selt süsteemi käi­vi­ta­misel.
  • Väl­ja­lü­li­ta­tud: Seade ei ole kon­fi­gu­ree­ri­tud au­to­maat­selt käivituma süsteemi käi­vi­ta­misel.
  • Maskitud: Seade on täie­li­kult deak­ti­vee­ri­tud, nii et seda ei saa käivitada ei käsitsi ega au­to­maat­selt.
  • Staa­ti­line: Seade ei käivitu ise­seis­valt, vaid sõltub ta­va­li­selt teisest seadmest ja käi­vi­ta­takse ainult selles kon­teks­tis.

Üksuse juhtimine

Üks systemctl-i peamisi üles­an­deid on üksuste haldamine. systemctl pakub mitmeid kasulikke käske ja valikuid, mis hõl­bus­ta­vad konk­reet­sete üksuste kohta teabe hankimist ja nende haldamist.

Näita üksuse faili

Kui soovid, et konk­reetse tee­nu­se­faili sisu kuvataks otse konsoolis, võid kasutada käsku cat. Näiteks teenuse ssh.service tee­nu­se­faili vaa­ta­miseks sisesta:

$ systemctl cat ssh.service
bash

Näita sõltuvusi

Kui kasutad list-dependencies, kuvatakse konk­reetse mooduli sõl­tu­vu­sed puu­st­ruk­tuu­ris. Käsk näeb välja järgmine:

$ systemctl list-dependencies sshd.service
bash

Ta­va­li­selt kuvatakse sõl­tu­vu­sed .target üksuse puhul, mis esindavad erinevaid süsteemi sei­sundeid. Kasutage lipikut --all, et saada täielik ja re­kur­siivne loetelu kõigist sõl­tu­vus­test.

Pöörd­sõl­tu­vuste (st nimetatud ühikust sõltuvate ühikute) ku­va­miseks lisage käskule --reverse. Lipud --before ja —after või­mal­da­vad teil näha ka sõltuvusi, mis algavad enne või pärast kõnealust ühikut.

Üksuste varjamine ja varjamise tü­his­ta­mine

Üksuse mas­kee­ri­mine lülitab selle te­ge­li­kult välja, nii et seda ei saa käivitada ei käsitsi ega au­to­maat­selt. Seda ka­su­ta­takse sageli selleks, et teenus või üksus ei käivituks kogemata või sõl­tu­vuste tõttu au­to­maat­selt. Mas­kee­ri­mine toimub nii, et luuakse asjaomase üksuse faili süm­bo­li­line link failile /dev/null käsuga mask:

$ sudo systemctl mask nginx.service
bash

See tagab, et Nginx-teenust ei saa mas­kee­ri­tud režiimis olles käivitada ei käsitsi ega au­to­maat­selt.

Maskimise tü­his­ta­mine eemaldab üksuselt mas­kee­ri­tud staatuse, nii et seda saab uuesti ta­va­pä­ra­selt käivitada. Maskimise tü­his­ta­mise käsk on unmask:

$ sudo systemctl unmask nginx.service
bash

Ük­sus­fai­lide re­di­gee­ri­mine

systemctl-il on või­ma­lu­sed ük­sus­fai­lide ko­han­da­miseks ja muut­miseks. Need funkt­sioo­nid lisati systemd ver­sioo­nis 218. Kui kasutad käsku edit, avatakse valitud üksuse üksusfail au­to­maat­selt re­di­gee­ri­miseks:

$ sudo systemctl edit nginx.service
bash

Re­di­gee­ri­misel luuakse tühi fail, et lisada või muuta üksuse mää­rat­lusesse konk­reet­seid juhiseid. Iga üksuse (nt nginx.service) jaoks luuakse ka­ta­loo­gis /etc/systemd/system alam­ka­ta­loog, mille failini­mele lisatakse laiend .d. Eespool toodud näite puhul oleks alam­ka­ta­loo­giks nginx.service.d.

Sellesse alam­kausta luuakse fail override.conf. Kui systemd laadib ühiku, ühendab ta selle kat­kendfaili sisu algse ühi­ku­fai­liga. Sel juhul on katkendis si­sal­du­va­tel juhistel eelis­õi­gus. Kogu ühi­ku­faili tööt­le­miseks võib kasutada lipikut --full:

$ sudo systemctl edit --full nginx.service
bash

--full va­ju­ta­misel avatakse ole­mas­olev sead­me­fail re­dak­to­ris, et seda muuta. Re­dak­to­rist väl­ju­misel salvestab süsteem muudetud faili kataloogi /etc/systemd/system.

Et tühistada enda tehtud muu­da­tu­sed, võid kas kustutada seadme kon­fi­gu­rat­sioo­ni­ka­ta­loogi .d või muudetud faili ka­ta­loo­gis /etc/systemd/system:

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

Täie­li­kult muudetud ük­sus­faili saab kustutada järgmise käsuga:

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

Pärast faili või kataloogi eemal­da­mist tuleb süsteemil systemd uuesti käivitada, et see lõpetaks viitamise kus­tu­ta­tud failidele ja kasutaks selle asemel süsteemi enda koopiat:

$ sudo systemctl daemon-reload
bash

Süsteemi oleku (käi­vi­tus­re­žiimi) ko­han­da­mine siht­mär­kide abil

systemd kasutab peamiselt sihtmärke (target), et rühmitada erinevaid üksusi. Seda tehakse selleks, et saavutada konk­reetne süsteemi seisund, sarnaselt teiste alg­laa­di­mis­süs­teemide käi­vi­tus­ast­me­tega. Lõpuga .target failid toimivad orien­tat­sioo­ni­punk­ti­dena, mis näitavad teatud funkt­sioo­nide kät­te­saa­da­vuse seisundit. See võimaldab ka­su­ta­ja­tel määrata soovitud üldise seisundi, mitte üksikuid vajalikke üksusi.

Prak­ti­line näide on swap.target, mis tähistab va­he­tus­val­mi­duse seisundit. Va­he­tus­prot­ses­sis osalevad üksused saavad end selle siht­mär­giga koos­kõ­las­tada, kasutades selliseid kon­fi­gu­rat­sioo­ni­või­ma­lusi nagu WantedBy= või RequiredBy=. Seevastu va­he­tu­sest sõltuvad üksused saavad seda näidata selliste seadete abil nagu Wants=, Requires= ja After=, et väl­jen­dada oma sõltuvust ja käi­vi­ta­mis­jär­je­korda seoses va­he­tu­sega.

Vaikimisi sihtkoha kuvamine ja sea­dis­ta­mine

Vaikimisi sihtmärgi kuvamine ja sea­dis­ta­mine võimaldab teil määrata süsteemi käi­vi­ta­misel selle vaikimisi oleku. Nii leiate oma süsteemi vaikimisi sihtmärgi:

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

Kui soovid vaikimisi sihtkohta muuta, kasuta käsku set-default koos sihtkoha nimega. Kasuta järgmist käsku, et määrata vaikimisi siht­ko­haks graphical.target, mis käivitab graa­fi­lise ka­su­ta­ja­lii­d­ese:

$ sudo systemctl set-default graphical.target
bash

Saadaval olevate siht­kohtade loetelu

Süsteemis kät­te­saa­da­vate siht­kohtade loetelu ku­va­miseks võite kasutada järgmist käsku:

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

See kuvab nimekirja kõigist teie süsteemi ins­tal­li­tud sih­tük­suste failidest. Iga sih­tük­suse kohta kuvatakse asukoht ja praegune staatus (nt ak­ti­vee­ri­tud või deak­ti­vee­ri­tud).

Eraldada siht­mär­gid

isolate abil saad korraga ak­ti­vee­rida kõik üksused, mis on seotud konk­reetse siht­mär­giga, ning peatada kõik ülejäänud üksused, mis sellega seotud ei ole.

Oletame, et töötate kesk­kon­nas, kus on aktiivne graphical.target, ja soovite minna üle puhtale mitme kasutaja režiimile ilma graa­fi­lise ka­su­ta­ja­lii­de­seta. Sel juhul saate graa­fi­lise süsteemi deak­ti­vee­rida, eraldades multi-user.target. Kuna graphical.target sõltub multi-user.target, kuid mitte vastupidi, pea­ta­takse üle­mi­ne­kul kõik graa­fi­li­sed teenused.

Siiski peaksite enne sihtmärgi iso­lee­ri­mist kont­rol­lima sellega seotud sõltuvusi. See aitab vältida oluliste prot­ses­side tahtmatut peatamist.

$ systemctl list-dependencies multi-user.target
bash

Kui oled märkinud aktiivsed üksused, mida soovid säilitada, ja oled nendega nõus, saad valida soovitud sihtkoha:

$ sudo systemctl isolate multi-user.target
bash

Oluliste sündmuste otseteed

Oluliste toi­min­gute jaoks, nagu süsteemi sulgemine või taas­käi­vi­ta­mine, on olemas kindlad käsud. Linuxis pakub systemctl aga ka prak­tilisi lühikäske, mis või­mal­da­vad täien­da­vaid funkt­sioone. Näiteks süsteemi pääs­te­re­žiimi (ühe kasutaja režiimi) lü­li­ta­miseks piisab, kui kasutada isolate rescue.target asemel rescue:

$ sudo systemctl rescue
bash

Saate süsteemi peatada numbriga stop:

$ sudo systemctl stop
bash

Saate käivitada täieliku väl­ja­lü­li­ta­mise numbriga poweroff:

$ sudo systemctl poweroff
bash

Teisalt saate taas­käi­vi­tuse käivitada numbriga reboot:

$ sudo systemctl reboot
bash

Kui olete sisse logitud, annavad need käsud teile teavet eel­seis­vate sündmuste kohta. Lihtsalt käsu täitmine või sihtmärgi eral­da­mine ei anna teile seda teavet. Oluline on teada, et paljud arvutid seovad nende toi­min­gute lühemad käsud süs­tee­miga systemd, et tagada nende õige täitmine.

Süsteemi taas­käi­vi­ta­miseks piisab ta­va­li­selt järg­mi­sest käsust:

$ sudo reboot
bash
Go to Main Menu