Nykyinen versio |
Oma tekstisi |
Rivi 1: |
Rivi 1: |
| {{DISPLAYTITLE:{{lcfirst:{{PAGENAME}}}}}}
| | Kuten [[Upstart]], systemd on käyttöjärjestelmän ja siinä ajettavien palveluiden käynnistymistä ja sammuttamista ohjaava ns. [[init]]-järjestelmä. Se on tällä hetkellä käytössä oletuksena uusimmissa [[Fedora|Fedoran]] versioissa. |
| '''systemd''' on käyttöjärjestelmän ja siinä ajettavien palveluiden käynnistymistä ja sammuttamista ohjaava ns. [[init]]-järjestelmä. Useimmat jakelut ovat siirtyneet käyttämään systemd-järjestelmää.
| |
|
| |
|
| == Ominaisuuksia == | | == Ominaisuuksia == |
Rivi 7: |
Rivi 6: |
| * Käyttää Linuxin [[control group]] -toimintoa prosessien seuraamiseen | | * Käyttää Linuxin [[control group]] -toimintoa prosessien seuraamiseen |
| * Yhteensopiva [[System V init]] -komentosarjojen kanssa | | * Yhteensopiva [[System V init]] -komentosarjojen kanssa |
| * Tarvittaessa viivästää palveluiden aktivointia siihen asti että joku yrittää niitä käyttää | | * Tarvittaesa viivästää palveluiden aktivointia siihen asti että joku yrittää niitä käyttää |
|
| |
|
| == Yksiköt == | | == Yksiköt == |
Rivi 16: |
Rivi 15: |
| Erityyppisten yksiköiden olemassaolo kannattaa huomioida systemd:n työkaluja käyttäessä. Usein järjestelmää hallittaessa tarvitsee käsitellä lähinnä <tt>.service</tt>- ja <tt>.socket</tt> -tyyppisiä yksiköitä. | | Erityyppisten yksiköiden olemassaolo kannattaa huomioida systemd:n työkaluja käyttäessä. Usein järjestelmää hallittaessa tarvitsee käsitellä lähinnä <tt>.service</tt>- ja <tt>.socket</tt> -tyyppisiä yksiköitä. |
|
| |
|
| == systemctl == | | == Systemctl == |
| systemctl-työkalua käytetään systemd:n ohjaamiseen. Sen avulla voidaan varsinkin hallita palveluiden käynnistymistä ja sammuttamista. Tässä on käytetty esimerkkinä [[Avahi]]-palvelun mukana tulevaa avahi-daemon.serviceä, mutta komennot toimivat vastaavasti myös monille muille palveluille.
| | Systemctl-työkalua käytetään systemd:n ohjaamiseen. Sen avulla voidaan varsinkin hallita palveluiden käynnistymistä ja sammuttamista. Tässä on käytetty esimerkkinä [[Avahi]]-palvelun mukana tulevaa avahi-daemon.serviceä, mutta komennot toimivat vastaavasti myös monille muille palveluille. |
|
| |
|
| === Tietoa palveluista === | | === Tietoa palveluista === |
| systemctl:n list-units -komennolla saa listauksen kaikista järjestelmän palveluista. Ilman --all -valitsinta saa listauksen vain aktiivisista yksiköistä.
| | Systemctl:n list-units -komennolla saa listauksen kaikista järjestelmän palveluista. Ilman --all -valitsinta saa listauksen vain aktiivisista yksiköistä. |
| Lisäksi --full -valitsin on usein tarpeellinen jotta pitkät yksikönnimet saa kokonaan näkyviin. | | Lisäksi --full -valitsin on usein tarpeellinen jotta pitkät yksikönnimet saa kokonaan näkyviin. |
| systemctl list-units --all | | systemctl list-units --all |
|
| |
|
| systemctl:n status-komennolla saa selvitettyä tärkeimmät yhteen yksikköön liittyvät tiedot.
| | Systemctl:n status-komennolla saa selvitettyä tärkeimmät yhteen yksikköön liittyvät tiedot. |
| systemctl status avahi-daemon.service | | systemctl status avahi-daemon.service |
|
| |
|
Rivi 53: |
Rivi 52: |
| # Poista sshd.service automaattisesti käynnistettävien yksiköiden joukosta | | # Poista sshd.service automaattisesti käynnistettävien yksiköiden joukosta |
| systemctl disable sshd.service | | systemctl disable sshd.service |
|
| |
| == Journal ==
| |
| systemd:n mukana tulee journaliksi kutsuttu lokivarasto, johon kerätään muun
| |
| muassa [[dmesg]] -komennonkin tulostama kernelin loki, [[syslog]] -viestit
| |
| ja palveluiden ns. stdout/stderr -viestit.
| |
|
| |
| Viestit tallentuvat normaalisti <tt>/var/log/journal/</tt> -hakemistossa
| |
| sijaitseviin tiedostoihin. Toisin kuin monet muut lokitiedostot, journalin
| |
| tiedostot eivät ole [[tekstitiedosto]]ja. Tämän takia esimerkiksi
| |
| perinteinen [[grep]] -työkalu ei suoraan sovellu niiden käsittelyyn yhtä
| |
| hyvin kuin perinteisten syslog-palveluiden ylläpitämien tekstimuitoisten
| |
| lokien käsittelyyn.
| |
|
| |
| Journalin sisältöä voi tarkastella systemd:n <tt>journalctl</tt> -komennolla.
| |
| Yksinkertaisimmillaan komennon voi ajaa ilman parametreja:
| |
| journalctl
| |
| Näin kutsuttuna journalctl näyttää kaikki journaliin tallennetut viestit.
| |
| Oletuksena viestit näytetään tekstinä, jonka asettelu muistuttaa perinteistä
| |
| syslog-lokitiedostoissa käytettyä asettelua. Vaikka journalctl normaalisti
| |
| terminaalissa ajettuna automaattisesti avaa lokiviestit [[less]]in sisään,
| |
| voi sen tulosteen myös putkittaa muille prosesseille:
| |
| journalctl | grep avahi-daemon
| |
| Näin voisi esimerkiksi hakea lokista vain viestejä, jotka liittyvät
| |
| Avahi-palveluun. Mikäli journalctl:n stdout ei ole terminaali, se ei
| |
| käynnistä lessiä.
| |
|
| |
| === Haku yksikön perusteella ===
| |
| Edellä esitettiin, kuinka grepin avulla voisi hakea journalista kaikki
| |
| avahiin liittyvät viestit. Esitetty tapa kuitenkin on jonkin verran epätarkka,
| |
| sillä myös muut kuin jonkun palvelun tekemät viestit voivat sisältää
| |
| hakuun liittyvän palvelun nimen.
| |
|
| |
| Jokaiseen journaliin kirjattuun viestiin kuitenkin erikseen merkitään,
| |
| mistä yksiköstä viesti on peräisin. Journalctl voi pyydettässä hyödyntää
| |
| tätä tietoa näytettävien lokitietojen rajaamiseen:
| |
| journalctl -u avahi-daemon
| |
| Nyt journalctl:n pitäisi näyttää vain oikeasti avahi-daemon.servicesta peräisin
| |
| olevat viestit, vaikka journalissa olisi muitakin merkkijonon
| |
| <tt>avahi-daemon</tt> sisältäviä viestejä.
| |
|
| |
| === Haku käynnistyskierroksen perusteella ===
| |
| Usein halutaan katsoa vain lokeja alkaen vain siitä hetkestä, kun kone viimeksi
| |
| käynnistettiin. Tähän voi hyödyntää journalctl:n <tt>-b</tt> -valitsinta:
| |
| journalctl -b
| |
| Tämä näyttää kaikki nykyiseen käynnistyskierrokseen liittyvät viestit.
| |
| Valitsimen voi yhdistää myös esimerkiksi edellä esiteltyyn <tt>-u</tt> -valitsimeen:
| |
| journalctl -b -u avahi-daemon
| |
|
| |
| Oletuksena <tt>-b</tt> -valitsin näyttää nykyisen käynnistyskierroksen, mutta
| |
| se voi myös ottaa vastaan parametrin, jolla valitaan joku muu käynnistyskierros.
| |
| Parametrista ehkä tavallisimmin tarpeellinen on negatiivinen numero, joilla saa
| |
| valittua uusia käynnistyskierroksia:
| |
| journalctl -b -1
| |
| journalctl -b -2
| |
| Komennoista ylempi näyttää nykyistä edeltävän käynnistyskierroksen viestit ja
| |
| jälkimmäinen sitä edeltävän kierroksen viestit.
| |
|
| |
| Myös positiivisia numeroita voi käyttää. Niissä esimerkiksi 1 vastaa vanhinta
| |
| journaliin tallentunutta käynnistyskierrosta, ja 2 toiseksi vanhinta.
| |
|
| |
| Mikäli on vaikea tietää tai muistaa, monenko käynnistyskerran takana joku
| |
| kiinnostava osa lokia on mutta haettu ajankohta on tiedosssa, voi ajankohtaa
| |
| vastaavan käynnistyskierrosnumeron selvittää <tt>--list-boots</tt> -valitsimella:
| |
| journalctl --list-boots
| |
|
| |
| === Haku päivämäärän mukaan ===
| |
| Esimerkiksi tietyn viikon viestit voi hakea <tt>--since</tt> -valitsimen ja
| |
| <tt>--until</tt> -valitsimen avulla:
| |
| journalctl --since 2014-04-07 --until 2014-04-13
| |
|
| |
|
| == Omat yksikkötiedostot == | | == Omat yksikkötiedostot == |
| Suurin osa käyttäjistä tulee toimeen ohjelmien mukana tulevilla yksikkötiedostoilla, mutta toisinaan on tarvetta joko muokata olemassaolevia yksiköitä tai luoda kokonaan uusia. Kumpikin on suhteellisen helppoa, sillä yksikkötiedostot ovat yksinkertaisehkoja tekstitiedostoja. Tiedostoformaatti on dokumentoitu <tt>systemd.unit</tt>-nimisessä [[man]]-sivussa. | | Suurin osa käyttäjistä tulee toimeen ohjelmien mukana tulevilla yksikkötiedostoilla, mutta toisinaan on tarvetta joko muokata olemassaolevia yksiköitä tai luoda kokonaan uusia. Kumpikin on suhteellisen helppoa, sillä yksikkötiedostot ovat yksinkertaisehkoja tekstitiedostoja. Tiedostoformaatti on dokumentoitu <tt>systemd.unit</tt>-nimisessä [[man]]-sivussa. |
|
| |
| Systemd-yksiköitä voivat tehdä myös muut kuin ylläpitäjäkäyttäjät. Lisäämällä hakemistoon <tt>~/.config/systemd/user/</tt> yksikkötiedostoja, käyttäjä voi asettaa omia prosesseja käynnistettäväksi esimerkiksi järjestelmän käynnistyksen yhteydessä tai ajastimella. Käyttäjän omien systemd-yksiköiden ohjaamiseen käytetään komentojen nimissä aina <tt>--user</tt>-parametria:
| |
| systemctl --user start oma-palvelu.service
| |
| journalctl --user
| |
|
| |
|
| === Järjestelmän yksikkötiedostojen muokkaaminen === | | === Järjestelmän yksikkötiedostojen muokkaaminen === |
Rivi 146: |
Rivi 72: |
|
| |
|
| Yksikkötiedostoformaatissa erilaisia direktiivejä on kymmeniä, mutta jossain tapauksissa ihan muutama niistä riittää. Usein kannattaa katsoa mallia järjestelmän mukana toimituista yksiköistä <tt>/lib/systemd/system/</tt> -hakemistosta ja systemd:n dokumentaatiosta. | | Yksikkötiedostoformaatissa erilaisia direktiivejä on kymmeniä, mutta jossain tapauksissa ihan muutama niistä riittää. Usein kannattaa katsoa mallia järjestelmän mukana toimituista yksiköistä <tt>/lib/systemd/system/</tt> -hakemistosta ja systemd:n dokumentaatiosta. |
|
| |
| === Ajastimet ===
| |
| Systemd tarjoaa perinteisen [[cron]]-palvelun tapaiset toiminnot komentojen ajastamiseen. Esimerkiksi edellisessä kohdassa tehty hello-palvelu voitaisiin ajastaa käynnistymään kymmenen minuutin välein luomalla tiedosto <tt>/etc/systemd/system/hello.timer</tt> tähän tapaan:
| |
|
| |
| [Unit]
| |
| Description=Ajetaan hello-palvelu kymmenen minuutin välein
| |
|
| |
| [Timer]
| |
| # Ensimmäinen ajo 10 minuuttia järjestelmän käynnistyksen jälkeen
| |
| OnBootSec=10min
| |
| # Ajetaan uudelleen 10 minuuttia edellisen ajon päätyttyä jälkeen
| |
| OnUnitInactiveSec=10min
| |
| Unit=hello.service
| |
|
| |
| [Install]
| |
| WantedBy=default.target
| |
|
| |
|
| |
| Näin luodut uudet yksiköt on sitten tarpeellista kytkeä päälle ja käynnistää:
| |
| <pre>
| |
| systemctl enable hello.service
| |
| systemctl enable hello.timer
| |
| systemctl start hello.timer
| |
| </pre>
| |
|
| |
| Ajastimet voidaan listata <code>systemctl list-timers</code> -komennolla. Esimerkkituloste:
| |
|
| |
| <pre>
| |
| # systemctl list-timers
| |
| NEXT LEFT LAST PASSED UNIT ACTIVATES
| |
| Mon 2018-08-27 18:20:15 EEST 1h 23min left Mon 2018-08-27 12:16:49 EEST 4h 39min ago certbot.timer certbot.service
| |
| Mon 2018-08-27 23:31:44 EEST 6h left Sun 2018-08-26 23:31:44 EEST 17h ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
| |
| Tue 2018-08-28 00:00:00 EEST 7h left Mon 2018-08-27 00:00:01 EEST 16h ago logrotate.timer logrotate.service
| |
| Tue 2018-08-28 00:00:00 EEST 7h left Mon 2018-08-27 00:00:01 EEST 16h ago man-db.timer man-db.service
| |
| Tue 2018-08-28 00:00:00 EEST 7h left Mon 2018-08-27 00:00:01 EEST 16h ago shadow.timer shadow.service
| |
|
| |
| 5 timers listed.
| |
| Pass --all to see loaded but inactive timers, too.
| |
| </pre>
| |
|
| |
| == Verkon hallinta ==
| |
|
| |
| * https://www.freedesktop.org/software/systemd/man/systemd.network.html
| |
| * https://www.freedesktop.org/software/systemd/man/systemd.netdev.html - virtuaaliset verkkoliitännät
| |
| * <code>networkctl</code>
| |
| * <code>systemctl status systemd-networkd</code>
| |
| * <code>systemctl status systemd-networkd-wait-online.service</code>
| |
|
| |
| === Kiinteä IP-osoite ===
| |
|
| |
| <code>/etc/systemd/network/eth0.network</code>:
| |
|
| |
| <pre>
| |
| [Match]
| |
| # Verkkokortin nimi
| |
| Name=eth0
| |
|
| |
| [Network]
| |
| Description=eth0:n kiinteä verkko
| |
| DHCP=no
| |
| Address=192.168.1.11/24
| |
| # Gateway IP Address
| |
| Gateway=192.168.1.1
| |
| # DNS server address
| |
| DNS=192.168.1.1
| |
| #Domains=home.lan
| |
| </pre>
| |
|
| |
| === DHCP ===
| |
|
| |
| <code>/etc/systemd/network/eth0.network</code>:
| |
|
| |
| <pre>
| |
| [Match]
| |
| # Verkkokortin nimi
| |
| Name=eth0
| |
|
| |
| [Network]
| |
| Description=eth0:n verkko DHCP:lla
| |
| # DHCP no|yes|ipv4|ipv6
| |
| DHCP=ipv4
| |
| # DNS server address
| |
| #DNS=192.168.101.1
| |
| #Domains=home.lan
| |
| </pre>
| |
|
| |
| === Verkkokortin nimen vaihtaminen (.link) ===
| |
|
| |
| Verkkokorttien nimiä voidaan vaihtaa SystemD:n <code>.link</code>-tiedostoilla. Verkkokortin uudelleennimeäminen on hyödyksi silloin, kun esimerkiksi palomuurisääntöjä pitää voida helpommin siirtää järjestelmästä toiseen.
| |
| Tässä esimerkissä verkkokortti nimeltä <code>eno1</code> uudelleennimetään <code>phy0</code>-nimiseksi.
| |
|
| |
| Listataan verkkokortit:
| |
|
| |
| <pre>
| |
| # ip link
| |
| 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
| |
| link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
| |
| 2: eno1: <BROADCAST,MULTICAST,PROMISC,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP mode DEFAULT group default qlen 1000
| |
| link/ether 74:d0:2b:2c:6e:d7 brd ff:ff:ff:ff:ff:ff
| |
| </pre>
| |
|
| |
| Luodaan <code>/etc/systemd/network/10-phy0.link</code>:
| |
|
| |
| <pre>
| |
| [Match]
| |
| # Käytetään MAC-osoitetta tunnistamaan verkkokortti
| |
| MACAddress=74:d0:2b:2c:6e:d7
| |
|
| |
| [Link]
| |
| # Uusi nimi
| |
| Name=phy0
| |
| Description=USB-portin vasemmalla puolella oleva ylempi verkkokortti
| |
| MACAddressPolicy=persistent
| |
| # Käännä verkkokortin rautakiihdytettyjä ominaisuuksia pois päältä (offloading)
| |
| # ethtool-ohjelmalla näitä voidaan hallita vielä monipuolisimmin
| |
| #TCPSegmentationOffload=off
| |
| #TCP6SegmentationOffload=off
| |
| #GenericSegmentationOffload=off
| |
| #GenericReceiveOffload=off
| |
| #LargeReceiveOffload=off
| |
| </pre>
| |
|
| |
| Lisätietoa: https://www.freedesktop.org/software/systemd/man/systemd.link.html
| |
|
| |
| == Muita Init-järjestelmiä ==
| |
| Vaikka Systemd on aika laajasti käytössä, ei se silti ole ainoa init-järjestelmä. Esimerkiksi perinteinen [[Sysvinit]], uudempi [[OpenRC]] tai [https://cr.yp.to/daemontools.html daemontools] ovat tapoja hoitaa järjestelmän käynnistäminen. Helpointa on käyttää Linux-jakelua, josta kyseinen init-järjestelmä löytyy. Esimerkiksi [[Gentoo]] käyttää OpenRC:tä.
| |
|
| |
| ==Katso myös==
| |
| * [[:archwiki:Systemd|Arch Wikin Systemd-artikkeli]]
| |
| * [http://without-systemd.org/wiki/index.php/Main_Page Without-Systemd-wiki], jossa on laajemmin systemd:n vaihtoehtoja käsitelty, lisäksi argumentteja, miksi systemd:tä ei välttämättä kannata käyttää sekä ohjeistuksia systemd:n poistamiseen ja korvaamiseen esim. [[:archwiki:OpenRC|OpenRC:llä. (Arch Wiki)]]
| |
|
| |
| [[Luokka: Järjestelmä]]
| |
| {{Malline:Palvelin}}
| |