systemd (Suomi)

From ArchWiki
Jump to navigation Jump to search

Lainattu ja suomennettu projektin sivulta:

systemd on Linuxille luotu kokonaisuus systeemin peruspalikoista. Se tarjoaa järjestelmän ja palvelumanagerin ja toimii PID:llä 1 ja lähtee suorittamaan järjestelmän muita osasia. Systemd tarjoaa agressiivisen rinnastus kyvyn, käyttää socketin ja D-Bus aktivointia palvelujen käynnistämiseen, mahdollistaa tarvittaessa taustaprosessien käynnistämisen, pitää kirjaa prosesseista jotka käyttävät Linuxin control groups, ylläpitää mounttaus ja automounttaus paikkoja ja implementoi toiminallisen riippuvuuksiin perustuvan hallinta logiikan. systemd tukee SysV ja LSB:n init skriptejä ja alkujaan toimii korvaavana ratkaisuna sysvinitille. Toisaalta systemd:stä löytyy myös loggaus palveluprosessi, apuvälineitä hallitsemaan perus järjestelmän konfigurointia kuten verkkotunnus, päivämäärä,paikalliset asetukset, listattuna käyttäjien sisäänkirjautumiset ja käytetyt virtuaalikoneet, järjestelmä tilit, ajoajan järjestelmäpolut sekä asetukset ja taustaprosessit yksinkertaisille verkko konfiguraatioille, verkon ajan tahdistus, kirjauksien siirrot ja nimiresoluutio.
Huomautus: Perustelu miksi Arch siirtyi systemd:hen, lue tämä keskusteluviesti.

Perus systemctl:n käyttö

Päällimmäinen komento jolla voidaan tutkiskella ja hallita systemd:tä on systemctl. Jotain hyötyjä tällä on järjestelmän tilan tutkiminen ja järjestelmän sekä palvelujen hallitseminen. Katso systemctl(1) löytääksesi enemmän tietoa liittyen sen käyttöön.

Vinkki:
  • Voit käyttää kaikkia seuraavia systemctl komentoja käyttämällä -H user@host kytkintä hallitsemaan systemd instanssia etäkoneesta. Tämä käyttää SSH tunnelia yhdistämään etänä systemd instanssiin.
  • Plasma:n alla on mahdollista asentaa systemd-kcmAUR graafisena tulkkina systemctl:lle. Asennuksen jälkeen moduuli löytyy System administration:in alta.

Järjestelmävaiheen analysointi

Näet järjestelmän tilan komennolla:

$ systemctl status

Listaa käynnistetyt yksiköt:

$ systemctl

tai:

$ systemctl list-units

Listaa kaatuneet yksiköt:

$ systemctl --failed

Saatavilla olevat yksikkö tiedostot (eng. unit file) ovat nähtävissä poluissa /usr/lib/systemd/system/ ja /etc/systemd/system/ (viimeineen vaatii oikeuksia polun lukemiseen). Listaa asennetut yksikkö tiedostot komennolla:

$ systemctl list-unit-files

Näytä cgroup slice, muisti ja isäntä PID:ille:

$ systemctl status pid

Yksiköiden käyttö

Yksiköitä voi olla esim. palvelut (.service), mounttaus paikat (.mount), laitteet (.device) tai socketit (.socket).

Kun systemctl:ää halutaan käyttää, joudut usein määrittelemään kokonaisuudessa koko yksikkö tiedoston nimen, mukaanlukien sen loppuliitteen, esim. sshd.socket. Siitä huolimatta on olemassa muutamia lyhyitä muotoja kun tarkennetaan yksikköä kuten seuraavissa systemctl komennoissa on:

  • Jos loppuliitettä ei tarkenneta, systemctl olettaa .service. Esim. netctl ja netctl.service tulkitaan samana.
  • Mounttaus paikat automaattisesti käännetään oikeaan muotoon .mount yksikkö. Esim. antamalla /home on sama kuin home.mount.
  • Samalla tavalla kuin mounttaus paikat, laitteet automaattisesti käännetään muotoon .device yksikkö, siksipä antamalla /dev/sda2 on sama kuin dev-sda2.device.

Löydät aiheesta yksityiskohtaisesti systemd.unit(5).

Huomautus: Jotkin yksikkö nimet sisältävät @ merkin (esim. muotoa name@string.service): tällöin nämä ovat instansseja template yksiköstä, minkä todellinen tiedosto nimi ei sisällä string osaa (esim. muotoa name@.service). string on mitä kutsutaan instanssi tunnisteeksi, ja on samanlainen komennon kanssa joka annetaan template yksikölle kun sitä kutsutaan systemctl komennolla: yksikkö tiedostossa se korvautuu %i tarkenteella. Tarkemmin sanottuna, ennen kuin systemd yrittää toteuttaa name@.suffix template yksikön, se yrittää etsiä yksikköä samalla name@string.suffix tiedosto nimellä, vaikkakin tälläinen "yhteenotto" tapahtuu harvoin, esim. suurin osa yksikkö tiedostoista jotka sisältää @ merkin ovat tarkoitettu template yksiköksi. Jos template yksikköä kutsutaan ilman instanssi tunnistetta, kutsu yksinkertaisesti epäonnistuu, koska %i tarkennetta ei pystytä korvaamaan.
Vinkki:
  • Suurin osa seuraavista komennoista toimii myös vaikka useampi yksikkö on annettu tarkennukseksi, kato systemctl(1) lisäinformaatiolle.
  • --now kytkintä voidaan käyttää yhdessä enable, disable, ja mask kanssa vastaavasti käynnistää, lopettaa, tai naamioida yksikkö välittömästi kuin vastaisuudessa vasta uudelleen käynnistäessä.
  • Paketti saattaa tarjota yksikköjä eri tarkoituksiin. Jos olet juuri asentanut paketin, pacman -Qql paketti | grep -Fe .service -e .socket voidaan käyttää tarkistamaan ja löytämään nämä yksiköt.

Statuksen tarkistaminen

Manuaali eri yksiköistä (mikäli yksikkö sitä tukee) voidaan näyttää komennolla:

$ systemctl help yksikkö

Status yksiköstä, silloinkin jos se ei ole sillä hetkellä toiminnassa näytetään komennolla:

$ systemctl status yksikkö

Tarkistaaksesi mikäli yksikkö on aktivoitu ja sen toiminta on sallittu:

$ systemctl is-enabled yksikkö

Käynnistäminen, uudelleen käynnistys ja uudelleen lataaminen

Käynnistä yksikkö välittömästi:

# systemctl start yksikkö

Lopeta yksikön toiminta välittömästi:

# systemctl stop yksikkö

Käynnistä uudelleen yksikkö:

# systemctl restart yksikkö

Uudelleen lataa yksikkö ja sen konfiguraatio:

# systemctl reload yksikkö

Uudelleen lataa systemd managerin konfiguraatio, jolla skannataan uusia tai muutettuja yksikköjä:

# systemctl daemon-reload
Huomautus: Tämä ei kysy muutettuja yksikköjä lataamaan uudelleen omaa konfiguraatiotaan. Katso uudelleen lataus esimerkki alhaalla.

Aktivointi

Aktivoi yksikkö käynnistymään heti bootatessa:

# systemctl enable yksikkö

Aktivoi yksikkö käynnistymään heti bootatessa ja käynnistä se välittömästi:

# systemctl enable --now yksikkö

Deaktivoi yksikkö käynnistymästä bootatessa:

# systemctl disable yksikkö

Naamiointi

Naamioi yksikkö tehdäksesi käynnistämisestä mahdotonta (manuaalisesti sekä riippuvuutena, mikä tekeekin naamioinnista vaarallisen):

# systemctl mask yksikkö

Paljasta yksikkö:

# systemctl unmask yksikkö

Virran hallinta

polkit on tarpeellinen virranhallinnalle epäoikeutettuna käyttäjänä. Jos olet lokaalissa systemd-logind käyttäjä sessiossa ja mikään muu sessio ei ole aktiivinen, seuraavat komennot toimivat ilman root-oikeuksia. Jos näin ei ole (esim. jos joku toinen käyttäjä on kirjautuneena tty:hyn), systemd kysyy automaattisesti root salasanaa.

Sammuttaminen ja uudelleen käynnistys järjestelmälle:

$ systemctl reboot

Sammuta ja sammuta järjestelmästä virta:

$ systemctl poweroff

Lakkauta järjestelmä:

$ systemctl suspend

Laita järjestelmä taukotilaan:

$ systemctl hibernate

Laita järjestelmä hybridiuni tilaan:

$ systemctl hybrid-sleep

Yksikkö tiedostojen kirjoittaminen

Systemd:n syntaksi yksikkö tiedostoissa (systemd.unit(5)) on saanut inspiraationsa XDG Desktop Entry Specification .desktop tiedostoista, joka taas on saanut inspiraationsa Microsoft Windows .ini tiedostoista. Yksikkö tiedostot ladataan useista sijainneista (nähdäksesi täyden listan, suorita systemctl show --property=UnitPath terminaalissa), mutta tärkeimmät ovat (listattuna pienimmästä suurimpaan arvojärjestyksessä):

  • /usr/lib/systemd/system/: yksiköt tarjoaa asennetut paketit
  • /etc/systemd/system/: yksiköt jotka järjestelmän valvoja on asentanut
Huomautus:
  • Latauspolut ovat täysin erilaiset kun suoritetaan systemd käyttäjä tilassa.
  • systemd yksiköiden nimet voivat sisältää vain ASCII alfanumeerisia kirjaimia, alleviivauksia ja pisteitä. Kaikki muut kirjaimet täytyy korvata C-tyylisillä "\x2d" koodinvaihtomerkeillä tai antaa näiden ennaltamäärätyillä semantiikoilla ('@', '-'). Katso systemd.unit(5) ja systemd-escape(1) lisäinformaatiolle.

Kannattaa katsoa pakettien asentamia yksiköitä esimerkiksi. Lisää löytyy myös täältä systemd.service(5) § EXAMPLES.

Vinkki: Kommentit joiden alussa on # voidaan myös käyttää yksikkö tiedostoissa, mutta vain uusilla riveillä. Rivin jälkeen annetut kommentit systemd parametreissä johtaa siihen ettei yksikkö aktivoidu.

Riippuvuuksien käsittely

Systemd:llä riippuvuuksia pystytään ratkomaan suunnittelemalla yksikkö tiedostot oikein. Kaikkein tyypillisin tapaus on, kun yksikkö A vaatii yksikköä B käynnistymään ennen yksikköä A. Siinä tapauksessa lisää Requires=B ja After=B [Unit] -osaan A:ta. Jos riippuvuus on vapaaehtoinen, lisää sen sijaan Wants=B ja After=B. Huomaa ettei Wants= ja Requires= vastaa After=, tarkoittaen siis sitä jos After= ei ole tarkennettu, nämä kaksi yksikköä käynnistetään rinnakkain.

Riippuvuuksia on yleensä asetettu palveluihin eikä kohteisiin: #Kohteet. Esimerkiksi mikä tahansa palvelu joka konfiguroi verkkoyhteys rajapinnan, nostaa network.target jonka takia omien yksiköiden suorittaminen sen jälkeen on riittoisa sillä network.target on käynnissä jo muutenkin.

Palvelu tyypit

Käytettävissä on useita käynnistys tyyppejä, joista voi harkita itse sopivaa käynnistystapaa kirjottaessa omaa palvelu tiedostoa. Tämä asetetaan Type= parametrilla [Service] osassa:

  • Type=simple (oletus): systemd käynnistää palvelun välittömästi. Tämä prosessi ei saa haarukoita muihin osasiin. Älä käytä tätä käynnistystapaa mikäli kyseinen palvelu vaatii muiden palveluiden kutsumista, ellei palvelu ole suoritinkannan aktivointi.
  • Type=forking: systemd käynnistää palvelun kun prosessi haarukoituu muihin osasiin ja isäntä prosessi lopettaa toimintansa. Tyypillisille taustaprosesseille tämä on varmin vaihtoehto, ellet tiedä sen olevan tarpeeton. Kannattaa myös määrittää PIDFile=, jotta systemd voi seurata pääprosessia.
  • Type=oneshot: tämä on hyödyllinen skripteille, jotka tekevät yhden asian ja lopettavat toimintansa. Voit myös haluta asettaa RemainAfterExit=yes, jotta systemd tulkitsee tämän palvelun aktiiviseksi vielä sen jälkeen kun prosessi on oikeasti lopettanut toimintansa.
  • Type=notify: identtinen Type=simple kanssa, mutta vain siinä tapuksessa kun taustaprosessi lähettää signaalin systemd:lle ollessaan valmis. Viittauksen tähän toteutukseen tulee libsystemd-daemon.so:sta.
  • Type=dbus: palvelu on valmis kun BusName ilmestyy DBus:sin järjestelmäväylässä.
  • Type=idle: systemd viivästyttää palvelun binäärien suorittamista kunnes kaikki työt on saatu toimintaan. Muutoin tämä käynnistystapa vastaa Type=simple.

Katso systemd.service(5) § OPTIONS manuaali yksityiskoihtaisemmasta selityksestä liittyen Type arvoihin.

Valmiiden yksiköiden muokkaaminen

Välttääksesi ristiriitoja pacman:in kanssa, pakettien mukana tulevia yksikkö tiedostoja ei saisi suoraan muokata. On olemassa kaksi turvallista tapaa muokata yksikköä koskematta alkuperäiseen tiedostoon: luo uusi yksikkö tiedosto, joka kirjoittaa edellisen yli tai luo drop-in pätkä, joka tulee alkuperäisen päälle. Molemmissa tapauksissa yksikkö täytyy ladata uudestaan saadaksesi muutokset käyttöön. Tämä voidaan tehdä joko muokkaamalla yksikköä systemctl edit (joka lataa yksikön uudestaan automaattisesti) tai lataamalla kaikki yksiköt uudestaan komennolla:

# systemctl daemon-reload
Vinkki:
  • Voit käyttää systemd-delta nähdäksesi minkä yksikkö tiedostojen yli on kirjoitettu tai laajennettu ja tarkalleen mitä muutoksia on tehty.
  • Käytä systemctl cat yksikkö nähdäksesi yksikön sisällön ja kaikki siihen liittyvät drop-in pätkät.

Korvaavat yksikkö tiedostot

Korvataksesi yksikkö tiedoston /usr/lib/systemd/system/yksikkö, luo tiedosto /etc/systemd/system/yksikkö ja uudelleen aktivoi yksikkö päivittämään symlinkit:

# systemctl reenable yksikkö

Vaihtoehtoisesti, suorita:

# systemctl edit --full yksikkö

Tämä avaa /etc/systemd/system/yksikkö muokkaus ohjelmassa (kopioimalla asennetun version jos se ei ole olemassa) ja automaattisesti lataa sen kun olet valmis muokkauksen kanssa.

Huomautus: Korvaavat yksiköt pysyvät käytössä, vaikka Pacman päivittää alkuperäiset yksiköt tulevaisuudessa. Tämä tekee järjestelmän ylläpidosta hankalaa ja siksi seuraava lähestymistapa on suotavampaa.

Drop-in tiedostot

Luodaksesi drop-in tiedostoja yksikkö tiedostoille /usr/lib/systemd/system/yksikkö, luo polku /etc/systemd/system/yksikkö.d/ ja aseta .conf tiedostot sinne kirjoittaaksesi tiedostojen yli tai lisätäksesi lisää vaihtoehtoja. systemd jäsentää sekä asettaa nämä tiedostot alkuperäisen yksikön päälle.

Helpoin tapa on suorittaa komento:

# systemctl edit yksikkö

Tämä avaa tiedoston /etc/systemd/system/yksikkö.d/override.conf tekstin käsittely ohjelmassa (luoden sen jos tarpeellista) ja automaattisesti lataa yksikön kun olet muokannut tiedoston.

Huomautus: Kaikkia avaimia ei pysty ylittämään drop-in tiedostoilla. Esim. vaihtaaksesi Conflicts= korvaava tiedosto on tarpeellinen.

Palauta toimittajan versioon

Palauttaaksesi tehdyistä muutoksista joihin on käytetty systemctl edit käytä komentoa:

# systemctl revert yksikkö

Esimerkkejä

Jos haluat yksinkertaisesti lisätä vaihtoehtoisen riippuvuuden yksikölle, voit mahdollisesti luoda seuraavan mukaisen tiedoston:

/etc/systemd/system/yksikkö.d/customdependency.conf
[Unit]
Requires=uusi riippuvuus
After=uusi riippuvuus

Vaihtaaksesi ExecStart direktiivin yksikölle, joka ei ole tyyppiä oneshot, luo seuraavan mukainen tiedosto:

/etc/systemd/system/yksikkö.d/customexec.conf
[Service]
ExecStart=
ExecStart=uusi komento

Huomaa kuinka ExecStart pitää tyhjentää ennenkuin se voidaan uudelleenasettaa [1]. Sama pätee jokaiselle komponentille, joka pitää määrittää useaan kertaan esim. OnCalendar ajastimille.

Vielä yksi esimerkki palvelun automaattisesta uudelleen käynnistämisestä:

/etc/systemd/system/yksikkö.d/restart.conf
[Service]
Restart=always
RestartSec=30

Kohteet

systemd komponentit

Vinkkejä ja konsteja

Vianmääritys

Katso myös