Systemd
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 Fedoran versioissa.
Ominaisuuksia
- Nopeuttaa järjestelmän käynnistymistä suorittamalla toisistaan riippumattomia tehtäviä rinnakkaisesti
- Tarjoaa valmiita toimintoja joilla voidaan korvata pitkiä perinteisten init-järjestelmien komentosarjoja
- Käyttää Linuxin control group -toimintoa prosessien seuraamiseen
- Yhteensopiva System V init -komentosarjojen kanssa
- Tarvittaesa viivästää palveluiden aktivointia siihen asti että joku yrittää niitä käyttää
Yksiköt
Tavallisimmin Systemd:n tarjoamia työkaluja käytetään palveluiden, kuten sshd tai Cups, hallintaan. Systemd hallitsee palveluiden lisäksi myös muutamaa muunlaista asiaa. Erilaisille systemd:lla käsiteltäville asioille yhteinen termi on yksikkö (englanniksi unit).
Erityyppiset yksiköt erottaa toisistaan helposti nimen loppuosan perusteella. Palvelut päättyvät aina .service-merkkijonoon, kun taas esimerkiksi tiedostojärjestelmien liitospisteitä vastaavien yksiköiden nimien lopussa on aina .mount.
Erityyppisten yksiköiden olemassaolo kannattaa huomioida Systemd:n työkaluja käyttäessä. Usein järjestelmää hallittaessa tarvitsee käsitellä lähinnä .service- ja .socket -tyyppisiä yksiköitä.
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.
Tietoa palveluista
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.
systemctl list-units --all
Systemctl:n status-komennolla saa selvitettyä tärkeimmät yhteen yksikköön liittyvät tiedot.
systemctl status avahi-daemon.service
Tämän tulisi tulostaa jotain seuraavanlaista:
avahi-daemon.service - Avahi mDNS/DNS-SD Stack Loaded: loaded (/lib/systemd/system/avahi-daemon.service; enabled) Active: active (running) since Thu, 27 Oct 2011 10:15:57 +0300; 7h ago Main PID: 889 (avahi-daemon) Status: "avahi-daemon 0.6.30 starting up." CGroup: name=systemd:/system/avahi-daemon.service
Show-komennolla puolestaan saa pidemmän listauksen avahi-daemon.serviceen liittyvistä tiedoista. Se voi olla hyödyllistä esimerkiksi yksikkötiedostoja kirjoitettaessa.
systemctl show avahi-daemon.service
Palveluiden käynnistäminen ja pysäyttäminen
# Käynnistä Avahi-palvelu systemctl start avahi-daemon.service
# Pysäyttäminen vastaavasti stop-käskyllä: systemctl stop avahi-daemon.service
Automaattisesti käynnistettävät palvelut
Edellämainitut start- ja stop-komennot käynnistävät ja pysäyttävät yksikön, mutta ne eivät vaikuta siihen, mitä käynnistetään automaattisesti. Tähän sen sijaan käytettäisiin systemctl:n enable- ja disable-komentoja.
# Käynnistä sshd.service automaattisesti järjestelmän käynnistyessä systemctl enable sshd.service
# Poista sshd.service automaattisesti käynnistettävien yksiköiden joukosta systemctl disable sshd.service
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 systemd.unit-nimisessä man-sivussa.
Järjestelmän yksikkötiedostojen muokkaaminen
Järjestelmän mukana toimitettavat yksikkötiedostot sijaitsevat luultavasti /lib/systemd/system/-hakemistossa. Niitä on mahdollista muokata suoraan sielläkin, mutta mieluummin kannattaa ottaa siellä sijaitsevasta yksiköstä kopio /etc/systemd/system/-hakemistoon ja muokata sitä siellä. Tällöin systemd /etc:n alla sijaitsevaa yksikköä ennemmin kuin /lib:n alla olevaa, ja ohjelmiston päivittyminen ei ylikirjoita paikallisesti tehtyjä muutoksia.
Kokonaan uusien yksikkötiedostojen kirjoittaminen
Joskus on tarpeen luoda kokonaan uusia yksikköjä, esimerkiksi ajamaan joku komento aina koneen käynnistyessä tai pitämään käynnissä jotain ohjelmistoa jonka mukana ei tullut yksikköä Systemd:lle.
Myös itse kirjoitetut yksiköt kannattaa sijoittaa /etc/systemd/system/-hakemistoon.
Allaoleva esimerkkiyksikkö ajaa yksikköä käynnistettäessä yksinkertaisen komennon. Sitä voi kokeilla esimerkiksi kopioimalla sen sisällön /etc/systemd/system/hello.service-nimiseen tiedostoon.
[Unit] Description=A simple example service unit that runs a command when started [Service] Type=oneshot ExecStart=/bin/echo Hello!
Yksikkötiedostoformaatissa erilaisia direktiivejä on kymmeniä, mutta jossain tapauksissa ihan muutama niistä riittää. Usein kannattaa katsoa mallia järjestelmän mukana toimituista yksiköistä /lib/systemd/system/ -hakemistosta ja Systemd:n dokumentaatiosta.