Kuinka hallita palveluita ja yksiköitä systemctl-komennolla
Linuxissa systemctl:llä on keskeinen rooli init-järjestelmän ja palvelunhallintaohjelman systemd:n hallinnassa. Systemctl:n avulla käyttäjät voivat hallita systemd-palveluita, niiden yksiköitä ja asetuksia, mikä tekee siitä järjestelmänhallinnan kannalta välttämättömän työkalun. Käynnistyksen hallinnasta järjestelmän tilojen mukauttamiseen – systemctl tarjoaa kattavan valikoiman toimintoja.
Mikä on systemctl?
systemctl on komentorivityökalu, jolla hallitaan systemd:tä, joka on Linux-käyttöjärjestelmien käynnistysjärjestelmä ja järjestelmänhallintaohjelma. systemd on nykyään vakiokäynnistysjärjestelmä useissa Linux-jakeluissa ja Linux-palvelinjakeluissa, kuten Ubuntu, Debian, Fedora, Red Hat Enterprise Linux (RHEL), CentOS, Arch Linux, Mageia ja Gentoo. Sitä ei kuitenkaan ole otettu käyttöön kaikissa jakeluissa.
Systemd-ekosysteemissä systemctl:llä on keskeinen rooli järjestelmäpalveluiden hallinnassa, määrityksissä, käynnistyskäyttäytymisessä ja järjestelmän ylläpidossa. Työkalun toiminnallisuus ulottuu pelkkää palveluiden käynnistämistä ja pysäyttämistä pidemmälle. Se tarjoaa kattavan hallinnan lähes kaikkiin Linux-järjestelmän osa-alueisiin.
Seuraavassa oppaassa on käytännön koodiesimerkkejä ja Linux-komentoja systemctl:n käyttöön. Alla olevat esimerkit perustuvat **Ubuntu 22.04:**ään.
Palvelunhallinta
Init-järjestelmän ensisijaisena tavoitteena on käynnistää Linux-ytimen käynnistymisen jälkeen tarvittavat komponentit (käyttöjärjestelmän komponentit). Init-järjestelmää käytetään myös palvelimella olevien palveluiden ja taustaprosessien tehokkaaseen hallintaan milloin tahansa järjestelmän käynnin aikana.
Systemd-ympäristössä suurin osa prosesseista keskittyy järjestelmän hallinnoimiin resursseihin. Näitä kutsutaan yksiköiksi. Yksiköt luokitellaan niiden edustaman resurssin tyypin mukaan, ja ne määritellään yksikkötiedostoissa. Yksikön tyypin tunnistaa tiedostotunnisteesta.
Palveluita hallittaessa ovat tärkeässä asemassa palveluyksiköt, joiden nimi päättyy päätteeseen .service. Tätä päätettä ei kuitenkaan aina tarvitse käyttää palvelujen hallintakomennoissa. systemd tunnistaa, että tällaiset komennot viittaavat yleensä palveluihin.
Palveluiden käynnistäminen ja pysäyttäminen
Yksi yleisimmistä tehtävistä, joita Linuxissa suoritetaan systemctl-komennolla, on palvelujen käynnistäminen ja pysäyttäminen. Nämä toiminnot ovat järjestelmänhallinnan perusta, ja niiden avulla voit hallita järjestelmässä käynnissä olevia prosesseja. Palvelun käynnistämiseen käytetään komentoa start. Jos työskentelet käyttäjänä, jolla ei ole pääkäyttäjän oikeuksia, sinun on käytettävä sudo.
$ sudo systemctl start application.servicebashKoska systemd on suunniteltu etsimään palvelunhallintakomentoja varten automaattisesti .service-t iedostoja , komento voidaan kirjoittaa myös yksinkertaistetussa muodossa:
$ sudo systemctl start applicationbashEsimerkiksi Apache-verkkopalvelimen käynnistämiseksi kirjoitat:
$ sudo systemctl start apache2bashJos haluat pysäyttää käynnissä olevan palvelun, käytä stop:
$ sudo systemctl stop application.servicebashKäynnistä uudelleen ja lataa uudelleen
Jos haluat käynnistää palvelun uudelleen – mikä on usein tarpeen asetusten muutoksen jälkeen – käytä komentoa restart:
$ sudo systemctl restart application.servicebashJos sovellus pystyy lataamaan asetustiedostonsa uudelleen käynnistämättä sitä uudelleen, prosessi voidaan käynnistää reload -komennolla:
$ sudo systemctl reload application.servicebashJos et ole varma, tarjoaako palvelu mahdollisuutta ladata asetukset uudelleen, voit käyttää komentoa reload-or-restart. Tämä lataa asetukset uudelleen, jos tämä toiminto on tuettu. Jos sitä ei tueta, komento käynnistää palvelun uudelleen asetusten päivittämisen aloittamiseksi.
$ sudo systemctl reload-or-restart application.servicebashPalveluiden käyttöönotto ja käytöstä poistaminen
Palveluita aktivoimalla ja deaktivoimalla voit määrittää, käynnistyykö palvelu automaattisesti järjestelmän käynnistyessä. Tämä on erityisen tärkeää järjestelmän suorituskyvyn, tietoturvan ja eri palveluiden välisten riippuvuussuhteiden hallinnan kannalta. Määritä automaattinen käynnistys järjestelmän käynnistyksen yhteydessä enable:
$ sudo systemctl enable application.servicebashKun tämä prosessi suoritetaan, luodaan symbolinen linkki. Tämä linkki yhdistää järjestelmäpalvelutiedoston kopion. Järjestelmäpalvelutiedosto sijaitsee yleensä hakemistossa /lib/systemd/system tai /etc/systemd/system. Täältä löydät myös kiintolevyllä olevan hakemiston, josta systemd etsii automaattisen käynnistyksen tiedostoja. Tämä tapahtuu yleensä hakemistossa /etc/systemd/system/some_target.target.wants.
$ sudo systemctl enable application.servicebashJos haluat estää palvelun käynnistymisen automaattisesti järjestelmän käynnistyessä, käytä disable:
$ sudo systemctl disable application.servicebashTämän jälkeen symbolinen linkki, joka määrittää automaattisen käynnistymisen järjestelmän käynnistyessä, poistetaan.
Huomio: Pelkkä palvelun aktivointi ei käynnistä sitä välittömästi nykyisessä istunnossa. Jos haluat käynnistää palvelun välittömästi ja määrittää sen käynnistymään automaattisesti järjestelmän käynnistyessä, sinun on suoritettava sekä komento start että komento enable.
Tarkista palvelujen tila
systemctl-komennolla voidaan näyttää tietoja palveluiden tilasta. Tämä on erityisen hyödyllistä järjestelmä- ja sovelluspalveluiden nykyisen tilan seurannassa ja vianmäärityksessä. Käytä tarkistukseen komentoa status:
$ systemctl status application.servicebashTämä komento tarjoaa monenlaista tietoa, kuten palvelun nykyisen tilan (aktiivinen, passiivinen, viallinen jne.), viimeksi suoritetut prosessit ja lokiviestit, cgroup-hierarkian sekä ensimmäiset lokirivit.
Linuxissa palvelun nykyisen tilan tarkistamiseen systemctl-komennolla käytetään is-active. Tämä komento kertoo, onko palvelu tällä hetkellä aktiivinen vai ei:
$ systemctl is-active application.servicebashNykyinen tila määritetään yleensä arvoksi active, jos palvelu on aktiivinen, tai arvoksi inactive, jos palvelu on passiivinen.
Voit tarkistaa, onko palvelu määritetty käynnistymään automaattisesti järjestelmän käynnistyksen yhteydessä, käyttämällä is-enabled. Tämä on erityisen hyödyllistä palvelujen käynnistysasetusten hallinnassa Linux-järjestelmässä.
$ systemctl is-enabled application.servicebashKomento ilmoittaa, onko palvelu käytössä vai pois käytöstä, ja asettaa vastauksen perusteella poistumiskoodiksi joko ”0” tai ”1”.
Voit myös käyttää komentoa is-failed tarkistaaksesi, onko tietyllä palvelulla virhetila:
$ systemctl is-failed application.servicebashJos suoritus onnistuu, tuloksena on active. Jos tapahtuu virhe, tulos on failed. Jos laite on pysäytetty tarkoituksella, vastauksena voi näkyä unknown tai inactive. Lopetustila 0 tarkoittaa, että on tapahtunut virhe, kun taas 1 tarkoittaa mitä tahansa muuta tilaa.
Järjestelmän tila
Tähän mennessä esitellyt komennot ovat keskittyneet yksittäisten palveluiden hallintaan. Nämä komennot eivät kuitenkaan anna tietoa järjestelmän nykytilasta. On olemassa useita systemctl-komentoja, jotka tarjoavat juuri tällaista tietoa.
list-units on hyödyllinen, kun halutaan saada yleiskuva Linuxin nykyisistä yksiköistä:
$ systemctl list-unitsbashKun suoritat tämän komennon, systemctl näyttää luettelon systemd:n hallinnoimista yksiköistä. Luettelon tulosteessa on useita sarakkeita, jotka sisältävät tarkempia tietoja kustakin yksiköstä. Seuraavat sarakkeet näkyvät:
- UNIT: Yksikön nimi (tämä otetaan usein yksikön tiedostonimestä, esim. sshd.service SSH-palvelimelle)
- LOAD: Ilmaisee, onko yksikkötiedosto ladattu onnistuneesti; mahdolliset arvot ovat
loaded,not-foundtaierror. - ACTIVE: Yksikön aktiivisuustila, joka voi vaihdella tilojen välillä, kuten
active,inactive,activatingtaideactivating - SUB: Alainen aktiivisuustila, joka antaa lisätietoja yksikön tilasta (esimerkiksi yksiköllä
activevoi olla SUB-tilarunning,exitedtaifailed). - DESCRIPTION: Lyhyt kuvaus yksiköstä, joka usein kuvaa yksikön tarkoitusta tai toiminnallisuutta
Komento näyttää kuitenkin oletuksena vain aktiiviset yksiköt. Tästä syystä tulosteen LOAD-sarakkeessa näkyy yleensä loaded ja ACTIVE-sarakkeessa active. Lisäparametreilla systemctl voidaan määrittää näyttämään myös muita tietoja. Esimerkiksi parametrilla --all näytetään kaikki systemd:n lataamat yksiköt niiden nykyisestä aktiivisuustilasta riippumatta.
$ systemctl list-units --allbashTulosta voidaan tarkentaa edelleen käyttämällä lisämerkkejä, kuten --state=, joilla suodatetaan tiettyjä tiloja LOAD-, ACTIVE- tai SUB-luokista. On tärkeää säilyttää merkki --all, jotta myös passiiviset yksiköt tulevat näkyviin:
$ systemctl list-units --all --state=inactivebashVoit myös käyttää suodatinta --type= tiettyjen yksikkötyyppien näyttämiseen, esimerkiksi jos haluat nähdä vain aktiivipalveluksessa olevat yksiköt:
$ systemctl list-units --type=servicebashLuettele kaikki yksikkötiedostot
Jos haluat näyttää luettelon kaikista Linuxin yksikkötiedostoista systemctl-komennolla (mukaan lukien ne, joita systemd ei ole yrittänyt ladata), voit käyttää list-unit-files. Tämä komento näyttää kaikki yksikkötiedostot, jotka systemd tunnistaa, mukaan lukien palvelut, socketit, kohteet ja muut.
$ systemctl list-units-filesbashKomento näyttää yksikkötiedostojen eri tilat. Nämä tilat kertovat, miten kyseiset yksiköt on määritetty, erityisesti niiden käyttäytymisen osalta järjestelmän käynnistyksen yhteydessä. Yleisimmät tilat ovat
- Käytössä: Laite on määritetty käynnistymään automaattisesti järjestelmän käynnistyksen yhteydessä.
- Pois käytöstä: Laitetta ei ole määritetty käynnistymään automaattisesti käynnistysprosessin aikana.
- Piilotettu: Laite on täysin pois käytöstä, joten sitä ei voi käynnistää manuaalisesti tai automaattisesti.
- Staattinen: Yksikköä ei käynnistetä itsenäisesti, vaan se riippuu yleensä toisesta yksiköstä ja käynnistyy vain tässä yhteydessä.
Yksikön johto
Yksi systemctl:n päätehtävistä on yksiköiden hallinta. systemctl tarjoaa joukon hyödyllisiä komentoja ja vaihtoehtoja, joiden avulla on helpompi saada tarkkoja tietoja yksittäisistä yksiköistä ja hallita niitä.
Näytä yksikkötiedosto
Jos haluat, että tietyn yksikkötiedoston sisältö näkyy suoraan konsolissa, voit käyttää komentoa cat. Jos haluat esimerkiksi tarkastella palvelun, kuten ssh.service, yksikkötiedostoa, kirjoita:
$ systemctl cat ssh.servicebashNäytä riippuvuudet
Jos käytät list-dependencies, tietyn yksikön riippuvuudet näytetään puurakenteena. Komento näyttää tältä:
$ systemctl list-dependencies sshd.servicebashOletuksena näytetään .target yksikön riippuvuudet, jotka edustavat järjestelmän eri tiloja. Käytä lippua --all, jos haluat täydellisen, rekursiivisen luettelon kaikista riippuvuuksista.
Jos haluat näyttää käänteiset riippuvuudet (eli yksiköt, jotka riippuvat määritetystä yksiköstä), lisää komentoon --reverse. Lippujen --before ja —after avulla voit myös tarkastella riippuvuuksia, jotka alkavat ennen kyseistä yksikköä tai sen jälkeen.
Yksiköiden peittäminen ja peitteen poistaminen
Yksikön peittäminen poistaa sen käytöstä niin, ettei sitä voi käynnistää manuaalisesti tai automaattisesti. Tätä käytetään usein varmistamaan, ettei palvelua tai yksikköä käynnistetä vahingossa tai automaattisesti riippuvuuksien vuoksi. Peittäminen tapahtuu luomalla kyseisen yksikön tiedostosta symbolinen linkki tiedostoon /dev/null komennolla mask:
$ sudo systemctl mask nginx.servicebashTämä varmistaa, että Nginx-palvelua ei voida käynnistää manuaalisesti tai automaattisesti, kun se on piilotetussa tilassa.
Peitteen poistaminen poistaa yksikön peitetyn tilan, jolloin se voidaan käynnistää uudelleen normaalisti. Peitteen poistamiseen käytettävä komento on unmask:
$ sudo systemctl unmask nginx.servicebashYksikkötiedostojen muokkaus
systemctl:ssä on toimintoja yksikkötiedostojen mukauttamiseen ja muokkaamiseen. Nämä toiminnot otettiin käyttöön systemd-versiossa 218. Jos käytät komentoa edit, valitun yksikön yksikkötiedosto avautuu automaattisesti muokattavaksi:
$ sudo systemctl edit nginx.servicebashMuokkaamisen yhteydessä luodaan tyhjä tiedosto, johon voidaan lisätä tai muuttaa yksikkömäärittelyn ohjeita. Jokaiselle yksikölle (esim. nginx.service) luodaan /etc/systemd/system-hakemistoon alihakemisto, jonka tiedostonimeen lisätään loppuliite .d. Edellä olevassa esimerkissä alihakemisto olisi nginx.service.d.
Tähän alikansioon luodaan override.conf-tiedosto. Kun systemd lataa yksikön, se yhdistää tämän pätkätiedoston sisällön alkuperäiseen yksikkötiedostoon. Tällöin pätkän ohjeilla on etusija. Koko yksikkötiedoston käsittelyyn voidaan käyttää lippua --full:
$ sudo systemctl edit --full nginx.servicebashPainamalla --full avaat olemassa olevan yksikkötiedoston editorissa muokattavaksi. Kun poistut editorista, järjestelmä tallentaa muokatun tiedoston kansioon /etc/systemd/system.
Jos haluat kumota itse tekemäsi muutokset, voit joko poistaa laitteen asetuskansion .d tai muokatun tiedoston kohdasta /etc/systemd/system:
$ sudo rm -r /etc/systemd/system/nginx.service.dbashTäysin uudistettu yksikkötiedosto voidaan poistaa seuraavalla komennolla:
$ sudo rm /etc/systemd/system/nginx.servicebashKun olet poistanut tiedoston tai kansion, sinun on ladattava systemd uudelleen, jotta se lakkaa viittaamasta poistettuihin tiedostoihin ja siirtyy käyttämään järjestelmän omaa kopiota:
$ sudo systemctl daemon-reloadbashJärjestelmän tilan (käyttötason) säätäminen tavoitteiden avulla
systemd käyttää ensisijaisesti kohteita (target) eri yksiköiden ryhmittelemiseen. Tällä pyritään saavuttamaan tietty järjestelmän tila, samalla tavalla kuin muiden käynnistysjärjestelmien ajotasot. Tiedostot, joiden tiedostotunniste .target, toimivat suuntaviivoina, jotka ilmaisevat tiettyjen toimintojen saatavuustilan. Näin käyttäjät voivat määrittää halutun kokonaistilan sen sijaan, että määrittäisivät tarvittavat yksittäiset yksiköt.
Käytännön esimerkkinä voidaan mainita swap.target, joka ilmaisee valmiuden vaihtoon. Vaihtoprosessiin osallistuvat yksiköt voivat sovittaa toimintansa tähän tavoitteeseen käyttämällä asetusvaihtoehtoja kuten WantedBy= tai RequiredBy=. Toisaalta yksiköt, jotka ovat riippuvaisia vaihdosta, voivat ilmaista tämän asetuksilla kuten Wants=, Requires= ja After=, jotta ne voivat ilmaista riippuvuutensa ja käynnistysjärjestyksensä suhteessa vaihtoon.
Hae ja määritä oletuskohde
Oletuskohteen hakeminen ja määrittäminen mahdollistaa järjestelmän oletustilan määrittämisen käynnistyksen yhteydessä. Näin löydät järjestelmäsi oletuskohteen:
$ systemctl get-default
Output
multi-user.targetbashJos haluat muuttaa oletuskohdetta, käytä komentoa set-default yhdessä kohteen nimen kanssa. Aseta oletuskohteeksi graphical.target, joka käynnistää graafisen käyttöliittymän, seuraavalla komennolla:
$ sudo systemctl set-default graphical.targetbashLuettelo saatavilla olevista kohteista
Voit luetella kaikki järjestelmässäsi käytettävissä olevat kohteet seuraavalla komennolla:
$ systemctl list-unit-files --type=targetbashTämä näyttää luettelon kaikista järjestelmään asennetuista kohdeyksikkötiedostoista. Jokaisesta kohteesta näytetään polku ja nykyinen tila (esim. aktivoitu tai deaktivoitu).
Erotella kohteet
Käsköllä isolate voit aktivoida samanaikaisesti kaikki yksiköt, jotka on liitetty tiettyyn kohteeseen, ja pysäyttää kaikki muut yksiköt, joita ei ole liitetty siihen.
Oletetaan, että työskentelet ympäristössä, jossa graphical.target on käytössä, ja haluat siirtyä puhtaaseen monikäyttäjätilaan ilman graafista käyttöliittymää. Tällöin voit poistaa graafisen järjestelmän käytöstä eristämällä multi-user.target. Koska graphical.target on riippuvainen multi-user.targetsta, mutta päinvastoin ei, kaikki graafiset palvelut pysähtyvät siirtymisen yhteydessä.
Ennen kohteen eristämistä sinun tulisi kuitenkin tarkistaa siihen liittyvät riippuvuudet. Näin vältät tärkeiden prosessien tahattoman pysäyttämisen.
$ systemctl list-dependencies multi-user.targetbashJos olet valinnut ne aktiiviset yksiköt, jotka haluat säilyttää, ja hyväksyt ne, voit määrittää halutun kohteen:
$ sudo systemctl isolate multi-user.targetbashPikakuvakkeet tärkeisiin tapahtumiin
Keskeisille toiminnoille, kuten järjestelmän sammuttamiselle tai uudelleenkäynnistämiselle, on määritetty omat komennot. Linuxissa systemctl tarjoaa kuitenkin myös käteviä pikakomentoja, jotka tuovat lisätoimintoja. Jos haluat esimerkiksi siirtää järjestelmän pelastustilaan (yhden käyttäjän tilaan), voit käyttää rescue isolate rescue.target sijaan:
$ sudo systemctl rescuebashVoit sammuttaa järjestelmän numerolla stop:
$ sudo systemctl stopbashVoit käynnistää täydellisen sammutuksen numerolla poweroff:
$ sudo systemctl poweroffbashToisaalta voit käynnistää uudelleenkäynnistyksen numerolla reboot:
$ sudo systemctl rebootbashJos olet kirjautunut sisään, nämä komennot antavat sinulle tietoa tulevista tapahtumista. Pelkkä komennon suorittaminen tai kohteen eristäminen ei anna sinulle tätä tietoa. On tärkeää tietää, että monet tietokoneet yhdistävät näiden toimintojen lyhyemmät komennot systemd-palveluun varmistaakseen niiden oikean suorittamisen.
Seuraava komento riittää yleensä järjestelmän uudelleenkäynnistykseen:
$ sudo rebootbash