Kuidas kasutada systemctl-i teenuste ja üksuste haldamiseks
Linuxis mängib systemctl keskset rolli alglaadimissüsteemi ja teenustehalduri systemd haldamisel. Systemctl abil saavad kasutajad hallata systemd teenuseid, nende üksusi ja seadistusi, mis teeb sellest süsteemihalduse jaoks asendamatu tööriista. Alates käivitamise juhtimisest kuni süsteemi seisundite kohandamiseni pakub systemctl laia funktsioonide valikut.
Mis on systemctl?
systemctl on käsurea tööriist, mille abil hallata systemd-d – Linuxi operatsioonisüsteemide alglaadimissüsteemi ja süsteemihaldurit. systemd on praegu standardne alglaadimissüsteem mitmetes Linuxi distributsioonides ja Linuxi serveridistributsioonides, nagu Ubuntu, Debian, Fedora, Red Hat Enterprise Linux (RHEL), CentOS, Arch Linux, Mageia ja Gentoo. Siiski ei ole see kõigis distributsioonides ühtlaselt kasutusele võetud.
Systemd-ökosüsteemis täidab systemctl keskset rolli süsteemiteenuste haldamisel, konfigureerimisel, käivitamisel ja süsteemi hooldamisel. Selle tööriista funktsionaalsus ulatub kaugemale teenuste lihtsast käivitamisest ja peatamisest. See võimaldab Linuxi süsteemi peaaegu kõigi aspektide põhjalikku haldamist.
Järgnevas juhendis leiad praktilisi koodinäiteid ja Linuxi käske systemctl kasutamiseks. Allpool toodud näited põhinevad Ubuntu 22.04-l.
Teenuste haldus
Init-süsteemi peamine eesmärk on käivitada komponendid, mida on vaja pärast Linuxi tuuma käivitamist (kasutajakeskkonda kuuluvad komponendid). Init-süsteemi kasutatakse ka teenuste ja taustprotsesside tõhusaks juhtimiseks serveris süsteemi töötamise mis tahes etapis.
Systemd-s keskenduvad enamik protsesse süsteemi poolt hallatavatele ressurssidele. Neid nimetatakse üksusteks. Need üksused liigitatakse vastavalt ressursi tüübile, mida nad esindavad, ning need on määratletud üksusfailides. Üksuse tüübi saab ära tunda faililaiendi järgi.
Teenuste haldamisel on olulised teenuseüksused, 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 teenustele.
Teenuste käivitamine ja peatamine
Üks levinumaid ülesandeid, mida Linuxis systemctl abil täidetakse, on teenuste käivitamine ja peatamine. Need funktsioonid on süsteemiadministreerimise aluseks ning võimaldavad teil kontrollida süsteemis töötavaid protsesse. Teenuse käivitamiseks kasutage käsku start. Kui töötate kasutajana, kellel puuduvad root-õigused, peate kasutama sudo.
$ sudo systemctl start application.servicebashKuna systemd on loodud teenuste haldamise käskude jaoks automaatselt .service-faile otsima, võib käsu sisestada ka lihtsustatud kujul:
$ sudo systemctl start applicationbashNäiteks Apache veebiserveri käivitamiseks sisestaksite järgmise käsu:
$ sudo systemctl start apache2bashKui soovid käimasolevat teenust peatada, kasuta käsku stop:
$ sudo systemctl stop application.servicebashTaaskäivita ja lae uuesti
Teenuse taaskäivitamiseks, mis on sageli vajalik pärast konfiguratsiooni muutmist, kasuta käsku restart:
$ sudo systemctl restart application.servicebashKui rakendus suudab oma konfiguratsioonifaile uuesti laadida ilma taaskäivitamiseta, saab protsessi käivitamiseks kasutada käsku reload:
$ sudo systemctl reload application.servicebashKui te ei ole kindel, kas teenus toetab konfiguratsiooni uuesti laadimist, võite kasutada käsku reload-or-restart. See laadib konfiguratsiooni uuesti, kui see võimalus on toetatud. Kui seda võimalust ei toetata, taaskäivitab käsk teenuse, et algatada konfiguratsiooni uuendamine.
$ sudo systemctl reload-or-restart application.servicebashTeenuste aktiveerimine ja deaktiveerimine
Teenuste aktiveerimise ja deaktiveerimise abil saate määrata, kas teenus peaks süsteemi käivitamisel automaatselt käivituma. See on eriti oluline süsteemi jõudluse, turvalisuse ja erinevate teenuste vaheliste sõltuvuste haldamise seisukohalt. Kasutage käsku enable, et seadistada automaatne käivitamine süsteemi käivitamisel:
$ sudo systemctl enable application.servicebashSelle protsessi käigus luuakse sümboliline link. See link ühendab süsteemiteenuse faili koopia. Süsteemiteenuse fail asub tavaliselt kataloogis /lib/systemd/system või /etc/systemd/system. Sealt leiad ka kõvakettal asuva kataloogi, kust systemd otsib automaatse käivitamise faile. See asub tavaliselt kataloogis /etc/systemd/system/some_target.target.wants.
$ sudo systemctl enable application.servicebashEt teenus ei käivituks süsteemi käivitamisel automaatselt, kasuta disable:
$ sudo systemctl disable application.servicebashSeejärel kustutatakse sümboliline link, mis määrab automaatse käivitamise süsteemi käivitamisel.
Tähelepanek: teenuse lihtsalt aktiveerimine ei käivita seda kohe käimasolevas sessioonis. Et teenus kohe käivitada ja seadistada nii, et see käivituks automaatselt süsteemi käivitamisel, 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 rakendusteenuste hetkeolukorra jälgimiseks ja diagnoosimiseks. Kasutage kontrollimiseks käsku status:
$ systemctl status application.servicebashSee käsk annab mitmesugust teavet, sealhulgas teenuse praeguse seisundi (aktiivne, mitteaktiivne, rikkis jne), viimati käivitatud protsesside ja logisõnumite, cgroupi hierarhia ning esimeste logiridade kohta.
Linuxis teenuse hetkeaktiivsuse kontrollimiseks kasutatakse systemctl-i abil is-active. See käsk näitab, kas teenus on hetkel aktiivne või mitte:
$ systemctl is-active application.servicebashKui teenus on aktiivne, määratakse selle hetkeolekuks tavaliselt väärtus active, kui teenus on mitteaktiivne, siis väärtus inactive.
Selleks et kontrollida, kas teenus on seadistatud süsteemi käivitamisel automaatselt sisse lülituma, võid kasutada käsku is-enabled. See on eriti kasulik teenuste käivitamisseadete haldamiseks Linuxi süsteemis.
$ systemctl is-enabled application.servicebashKäsk näitab, kas teenus on aktiveeritud või deaktiveeritud, ning määrab vastavalt vastusele väljumiskoodiks „0“ või „1“.
Samuti saate käsuga is-failed kontrollida, kas mõnel konkreetsel teenusel on veatunnus:
$ systemctl is-failed application.servicebashKui käsk täidetakse edukalt, väljastatakse active. Vea korral on koodiks failed. Kui seade peatati tahtlikult, võib vastuseks olla unknown või inactive. Lõpetamiskood 0 tähistab vea tekkimist, 1 aga muud seisundit.
Süsteemi seisund
Seni tutvustatud käsud on keskendunud üksikute teenuste haldamisele. Need käsud ei anna aga ülevaadet süsteemi hetkeolukorrast. On olemas mitmesuguseid systemctl-käskusid, mis suudavad just sellist teavet pakkuda.
list-units on kasulik, et saada ülevaade Linuxis hetkel käivitatud protsessidest:
$ systemctl list-unitsbashKui käsk systemctl käivitatakse, kuvab see systemd poolt hallatavate üksuste nimekirja. Selle nimekirja väljund sisaldab mitmeid veerge, milles on esitatud iga üksuse kohta konkreetset teavet. Kuvatakse järgmised veerud:
- UNIT: Üksuse nimi (see võetakse sageli üksuse failinimest, nt sshd.service SSH-daemoni puhul)
- LOAD: Näitab, kas üksuse fail laaditi edukalt; võimalikud väärtused on
loaded,not-foundvõierror. - ACTIVE: Üksuse aktiivsuse staatus, mis võib vahelduda režiimide vahel, nagu
active,inactive,activatingvõideactivating - SUB: Alluv tegevusstaatus, mis annab täiendavat teavet üksuse seisundi kohta (näiteks üksusel
activevõib SUB-staatuseks ollarunning,exitedvõifailed). - DESCRIPTION: Üksuse lühikirjeldus, mis peegeldab sageli üksuse otstarvet või funktsionaalsust
Kuid käsu vaikimisi seadistus näitab ainult aktiivseid üksusi. Seetõttu on väljundi veerus „LOAD“ tavaliselt näha loaded ja veerus „ACTIVE“ active. Lisamärkide abil saab systemctl-i seadistada nii, et see kuvaks ka täiendavat teavet. Näiteks märgi --all kasutamisel kuvatakse kõik systemd poolt laaditud üksused, sõltumata nende praegusest aktiivsuse seisundist.
$ systemctl list-units --allbashVäljundit saab veelgi täpsustada, kasutades lisamärke, näiteks --state=, et filtreerida LOAD-, ACTIVE- või SUB-kategooriate konkreetseid seisundeid. Oluline on jätta märk --all alles, et kuvataks ka mitteaktiivsed seadmed:
$ systemctl list-units --all --state=inactivebashVõite kasutada ka filtrit --type=, et kuvada teatud tüüpi üksusi, näiteks kui soovite näha ainult aktiivses teenistuses olevaid üksusi:
$ systemctl list-units --type=servicebashNäita kõiki üksusfaile
Kui soovid Linuxis systemctl-i abil kuvada kõigi üksusfailide nimekirja (sh need, mida systemd pole veel laadida proovinud), võid kasutada list-unit-files. See käsk kuvab kõik üksusfailid, millest systemd on teadlik, sealhulgas teenused, pistikupesad, sihtmärgid ja muud.
$ systemctl list-units-filesbashKäsk kuvab üksuste failide erinevad seisundid. Need seisundid näitavad, kuidas vastavad üksused on konfigureeritud, eelkõige seoses nende käitumisega süsteemi käivitamisel. Kõige levinumad seisundid on
- Lubatud: Seade on seadistatud nii, et see käivitub automaatselt süsteemi käivitamisel.
- Väljalülitatud: Seade ei ole konfigureeritud automaatselt käivituma süsteemi käivitamisel.
- Maskitud: Seade on täielikult deaktiveeritud, nii et seda ei saa käivitada ei käsitsi ega automaatselt.
- Staatiline: Seade ei käivitu iseseisvalt, vaid sõltub tavaliselt teisest seadmest ja käivitatakse ainult selles kontekstis.
Üksuse juhtimine
Üks systemctl-i peamisi ülesandeid on üksuste haldamine. systemctl pakub mitmeid kasulikke käske ja valikuid, mis hõlbustavad konkreetsete üksuste kohta teabe hankimist ja nende haldamist.
Näita üksuse faili
Kui soovid, et konkreetse teenusefaili sisu kuvataks otse konsoolis, võid kasutada käsku cat. Näiteks teenuse ssh.service teenusefaili vaatamiseks sisesta:
$ systemctl cat ssh.servicebashNäita sõltuvusi
Kui kasutad list-dependencies, kuvatakse konkreetse mooduli sõltuvused puustruktuuris. Käsk näeb välja järgmine:
$ systemctl list-dependencies sshd.servicebashTavaliselt kuvatakse sõltuvused .target üksuse puhul, mis esindavad erinevaid süsteemi seisundeid. Kasutage lipikut --all, et saada täielik ja rekursiivne loetelu kõigist sõltuvustest.
Pöördsõltuvuste (st nimetatud ühikust sõltuvate ühikute) kuvamiseks lisage käskule --reverse. Lipud --before ja —after võimaldavad teil näha ka sõltuvusi, mis algavad enne või pärast kõnealust ühikut.
Üksuste varjamine ja varjamise tühistamine
Üksuse maskeerimine lülitab selle tegelikult välja, nii et seda ei saa käivitada ei käsitsi ega automaatselt. Seda kasutatakse sageli selleks, et teenus või üksus ei käivituks kogemata või sõltuvuste tõttu automaatselt. Maskeerimine toimub nii, et luuakse asjaomase üksuse faili sümboliline link failile /dev/null käsuga mask:
$ sudo systemctl mask nginx.servicebashSee tagab, et Nginx-teenust ei saa maskeeritud režiimis olles käivitada ei käsitsi ega automaatselt.
Maskimise tühistamine eemaldab üksuselt maskeeritud staatuse, nii et seda saab uuesti tavapäraselt käivitada. Maskimise tühistamise käsk on unmask:
$ sudo systemctl unmask nginx.servicebashÜksusfailide redigeerimine
systemctl-il on võimalused üksusfailide kohandamiseks ja muutmiseks. Need funktsioonid lisati systemd versioonis 218. Kui kasutad käsku edit, avatakse valitud üksuse üksusfail automaatselt redigeerimiseks:
$ sudo systemctl edit nginx.servicebashRedigeerimisel luuakse tühi fail, et lisada või muuta üksuse määratlusesse konkreetseid juhiseid. Iga üksuse (nt nginx.service) jaoks luuakse kataloogis /etc/systemd/system alamkataloog, mille failinimele lisatakse laiend .d. Eespool toodud näite puhul oleks alamkataloogiks nginx.service.d.
Sellesse alamkausta luuakse fail override.conf. Kui systemd laadib ühiku, ühendab ta selle katkendfaili sisu algse ühikufailiga. Sel juhul on katkendis sisalduvatel juhistel eelisõigus. Kogu ühikufaili töötlemiseks võib kasutada lipikut --full:
$ sudo systemctl edit --full nginx.servicebash--full vajutamisel avatakse olemasolev seadmefail redaktoris, et seda muuta. Redaktorist väljumisel salvestab süsteem muudetud faili kataloogi /etc/systemd/system.
Et tühistada enda tehtud muudatused, võid kas kustutada seadme konfiguratsioonikataloogi .d või muudetud faili kataloogis /etc/systemd/system:
$ sudo rm -r /etc/systemd/system/nginx.service.dbashTäielikult muudetud üksusfaili saab kustutada järgmise käsuga:
$ sudo rm /etc/systemd/system/nginx.servicebashPärast faili või kataloogi eemaldamist tuleb süsteemil systemd uuesti käivitada, et see lõpetaks viitamise kustutatud failidele ja kasutaks selle asemel süsteemi enda koopiat:
$ sudo systemctl daemon-reloadbashSüsteemi oleku (käivitusrežiimi) kohandamine sihtmärkide abil
systemd kasutab peamiselt sihtmärke (target), et rühmitada erinevaid üksusi. Seda tehakse selleks, et saavutada konkreetne süsteemi seisund, sarnaselt teiste alglaadimissüsteemide käivitusastmetega. Lõpuga .target failid toimivad orientatsioonipunktidena, mis näitavad teatud funktsioonide kättesaadavuse seisundit. See võimaldab kasutajatel määrata soovitud üldise seisundi, mitte üksikuid vajalikke üksusi.
Praktiline näide on swap.target, mis tähistab vahetusvalmiduse seisundit. Vahetusprotsessis osalevad üksused saavad end selle sihtmärgiga kooskõlastada, kasutades selliseid konfiguratsioonivõimalusi nagu WantedBy= või RequiredBy=. Seevastu vahetusest sõltuvad üksused saavad seda näidata selliste seadete abil nagu Wants=, Requires= ja After=, et väljendada oma sõltuvust ja käivitamisjärjekorda seoses vahetusega.
Vaikimisi sihtkoha kuvamine ja seadistamine
Vaikimisi sihtmärgi kuvamine ja seadistamine võimaldab teil määrata süsteemi käivitamisel selle vaikimisi oleku. Nii leiate oma süsteemi vaikimisi sihtmärgi:
$ systemctl get-default
Output
multi-user.targetbashKui soovid vaikimisi sihtkohta muuta, kasuta käsku set-default koos sihtkoha nimega. Kasuta järgmist käsku, et määrata vaikimisi sihtkohaks graphical.target, mis käivitab graafilise kasutajaliidese:
$ sudo systemctl set-default graphical.targetbashSaadaval olevate sihtkohtade loetelu
Süsteemis kättesaadavate sihtkohtade loetelu kuvamiseks võite kasutada järgmist käsku:
$ systemctl list-unit-files --type=targetbashSee kuvab nimekirja kõigist teie süsteemi installitud sihtüksuste failidest. Iga sihtüksuse kohta kuvatakse asukoht ja praegune staatus (nt aktiveeritud või deaktiveeritud).
Eraldada sihtmärgid
isolate abil saad korraga aktiveerida kõik üksused, mis on seotud konkreetse sihtmärgiga, ning peatada kõik ülejäänud üksused, mis sellega seotud ei ole.
Oletame, et töötate keskkonnas, kus on aktiivne graphical.target, ja soovite minna üle puhtale mitme kasutaja režiimile ilma graafilise kasutajaliideseta. Sel juhul saate graafilise süsteemi deaktiveerida, eraldades multi-user.target. Kuna graphical.target sõltub multi-user.target, kuid mitte vastupidi, peatatakse üleminekul kõik graafilised teenused.
Siiski peaksite enne sihtmärgi isoleerimist kontrollima sellega seotud sõltuvusi. See aitab vältida oluliste protsesside tahtmatut peatamist.
$ systemctl list-dependencies multi-user.targetbashKui oled märkinud aktiivsed üksused, mida soovid säilitada, ja oled nendega nõus, saad valida soovitud sihtkoha:
$ sudo systemctl isolate multi-user.targetbashOluliste sündmuste otseteed
Oluliste toimingute jaoks, nagu süsteemi sulgemine või taaskäivitamine, on olemas kindlad käsud. Linuxis pakub systemctl aga ka praktilisi lühikäske, mis võimaldavad täiendavaid funktsioone. Näiteks süsteemi päästerežiimi (ühe kasutaja režiimi) lülitamiseks piisab, kui kasutada isolate rescue.target asemel rescue:
$ sudo systemctl rescuebashSaate süsteemi peatada numbriga stop:
$ sudo systemctl stopbashSaate käivitada täieliku väljalülitamise numbriga poweroff:
$ sudo systemctl poweroffbashTeisalt saate taaskäivituse käivitada numbriga reboot:
$ sudo systemctl rebootbashKui olete sisse logitud, annavad need käsud teile teavet eelseisvate sündmuste kohta. Lihtsalt käsu täitmine või sihtmärgi eraldamine ei anna teile seda teavet. Oluline on teada, et paljud arvutid seovad nende toimingute lühemad käsud süsteemiga systemd, et tagada nende õige täitmine.
Süsteemi taaskäivitamiseks piisab tavaliselt järgmisest käsust:
$ sudo rebootbash