Forstå og bruke Systemd


Liker det eller ikke, er systemd kommet for å bli, så vi kan like godt vet hva de skal gjøre med det

systemd er kontroversielt av flere grunner. Det er en erstatning for noe som mange Linux-brukere tror ikke behov for å bli erstattet, og antics av ​​systemd utviklerne har ikke vunnet hjerter og sinn. Men heller det motsatte, noe som gjenspeiles i denne berømte LKML tråd der Linus Torvalds utestengt systemd dev Kay Sievers fra Linux-kjernen.

Det er fristende å la personligheter komme i veien. Så gøy som det er å rant og jernbane og avgir fargerike skjellsord, det er ikke poenget. For lo så mange år var Linux innhold med sysvinit og BSD init. Så kom tilleggstjeneste ledere som service- og chkconfig kommandoer. Som var ment å gjøre service management enklere, men for meg var bare flere ting å lære som ikke gjør oppgavene enklere, men heller mer cluttery.

Så kom oppkomling og systemd, med alle typer convoluted addons for å opprettholde sysvinit kompatibilitet. Som er en fin ting å gjøre, men lykke til å forstå det. Nå Oppkomling blir pensjonert til fordel for systemd, sannsynligvis i Ubuntu 14.10, og du vil finne massevis av systemd libs og verktøy i 14.04. Bare for giggles, se på listen over filer i systemd-tjenester pakken i Ubuntu 14.04:

 $ dpkg -L systemd-tjenester 

Sjekk ut mannen sidene for å se hva alt dette ting gjør.

Det er alltid skummelt når utviklere begynner apestreker med viktige Linux delsystemer, fordi vi er ganske mye fast med hva de prakke på oss. Hvis vi ikke liker en bestemt program, eller skrivebordsmiljø, eller kommando det er flere alternativer, og det er lett å bruke noe annet. Men viktige delsystemer har dype kroker i kjernen, er alle slags ledelse skript og programvare pakkeavhengigheter, så erstatter man ikke en triviell oppgave.

Så moralen er ting endrer seg, datamaskiner er uunngåelig blir mer komplekse, og alt funker til slutt. Eller ikke, men fraværende evnen til å forme hendelser i vår egen smak vi har å forholde seg til det.

Første systemd Steps

Red Hat er oppfinneren og primær booster av systemd, så det beste distroer for å spille med det er Red Hat Enterprise Linux, RHEL kloner som CentOS og Scientific Linux, og selvfølgelig god ole Fedora Linux, som alltid leveres med den nyeste, største, og blødning-dristige. Mine eksempler er fra CentOS 7.

Erfarne RH brukere kan fortsatt bruke tjenesten og chkconfig i RH 7, men det er langt forbi tid til å dumpe dem i favør av innfødte systemd verktøy. systemd har forbi dem, og service og chkconfig støtter ikke innfødte systemd tjenester.

Vår kjære /etc /inittab er ikke mer. I stedet har vi en /etc /systemd /system /katalog stappfulle av symlinks til filer i /usr /lib /systemd /system /. /usr /lib /systemd /system /inneholder init skript; å starte en tjeneste ved oppstart det må knyttes til /etc /systemd /system /. Den systemctl kommandoen gjør dette for deg når du aktiverer en ny tjeneste, som dette eksemplet for ClamAV:

 # systemctl aktiver [email protected] -s '/usr /lib /systemd /system /clamd @ scan. service '' /etc/systemd/system/multi-user.target.wants/[email protected]'

How vet du navnet på init script, og hvor kommer den fra? På Centos7 de er brutt ut i separate pakker. Mange servere (for eksempel Apache) har ikke fanget opp tosystemd og ikke har systemd init skript. ClamAV tilbyr både systemd og sysvinit init skript, slik at du kan installere den du foretrekker:

 $ yum search clamavclamav-server-sysvinit.noarchclamav-server-systemd.noarch 

Så hva er inni disse init skript? Vi kan se for oss selv:

 $ mindre /usr/lib/systemd/system/[email protected] /lib/systemd/system/[email protected][Unit]Description = Generic clamav scanner daemon [Installer] WantedBy = multi-user.target 

Nå kan du se hvordan systemctl vet hvor du skal installere symlink, og dette init script inkluderer også en avhengighet av en annen tjeneste, clamd @ .service.

systemctl viser statusen for alle installerte tjenester som har init skript:

 $ systemctl listeandels filer --type = serviceUNIT FIL STATE [...] chronyd.service enabledclamd @ .service [email protected] deaktivert 

Det er tre mulige tilstander for en tjeneste: aktivert eller deaktivert, og statiske. Enabled betyr at den har en symlink i en .wants katalogen. Disabled betyr det ikke. Statisk betyr at tjenesten mangler [Install] avsnittet i sin init script, så du kan ikke aktivere eller deaktivere den. Statiske tjenester er vanligvis avhengig av andre tjenester, og styres automatisk. Du kan se dette i ClamAV eksempel som clamd @ .service er en avhengighet av [email protected], og det går bare når [email protected]~~number=plural går.

Ingen av disse statene fortelle deg om en kjøres. Ps-kommandoen vil fortelle deg, eller bruk systemctl å få mer detaljert informasjon:

 $ systemctl status bluetooth.servicebluetooth.service - Bluetooth tjeneste Loaded: lastet (/usr/lib.systemd/system/bluetooth.service; aktivert) Aktiv: aktiv (løping) siden to 2014-09-14 06:40:11 PDT Hoved PID: 4964 (bluetoothd) CGroup: /system.slice/bluetooth.service | _4964 /usr /bin /bluetoothd -n 

systemctl forteller deg alt du ønsker å vite, hvis du vet hvordan du skal spørre

Cheatsheet

Dette er de kommandoene du sannsynligvis kommer til å bruke mest.

 # systemctl starte [name.service] # systemctl stoppe [name.service] # systemctl starte [name.service] # systemctl reload [name.service] $ systemctl status [name.service] # systemctl er aktiv [name.service] $ systemctl list-enheter --type tjeneste --Alle 

systemd har 12 typer enheter. .service er systemtjenester, og når du kjører noen av de ovennevnte kommandoene du kan la av .service utvidelsen, fordi systemd forutsetter en serviceenhet hvis du ikke spesifiserer noe annet. De andre typer enheter er:



Target: gruppe av enheter

Auto: filsystem auto-monteringspunkt

Enhet: kernel enhetsnavn, som du kan se i sysfs og udev

Mount: filsystem monteringspunkt

Bane: fil eller katalog

Omfang: external prosessene ikke startet av systemd

Slice : en forvaltningsenheten av prosesser

Snapshot: systemd lagret tilstand

Socket: IPC (inter-prosess kommunikasjon) socket

Swap: swap fil

Timer .: systemd timer


Det er usannsynlig at du noensinne trenger å gjøre noe for å disse andre enheter, men det er godt å vite at de eksisterer og hva de er for. Du kan se på dem:

 $ systemctl list-enheter --type [enhetsnavn] 
skylden spillet

Uansett grunn, virker det som talsmennene for sysvinit erstatninger er besatt med oppstarttid. Mine systemd systemer, som CentOS 7, ikke starte opp så mye raskere enn de andre. Det er ikke noe jeg spesielt bryr seg om i alle fall, siden de fleste boot fartsmålinger bare måle nå login prompt, og ikke hvor lang tid det tar for at systemet skal helt starte og være brukbare. Microsoft Windows har lenge vært en forkjemper lovbryteren i dette gjelder, og nådde en logikk spørsmål ganske raskt, og deretter ta flere minutter å laste inn og kjøre nagware, commercialware, spyware, og stort sett alt annet enn det du ønsker. (Jeg sverger hvis jeg ser en dummere Oracle Java updater masende jeg kommer til å slå voldsomt.)

Selv så for alle som bryr seg om boot ganger du kan kjøre en kommando for å se hvor lenge hvert program og service tar å starte opp:

 $ systemd-analysere skylden 5.728s firewalld.service 5.111s plymouth-slutte-wait.service 4.046s tuned.service 3.550s accounts.daemon.service [...] < p> Og flere titalls flere. Vel det er alt for i dag, folkens. systemd er allerede et enormt kompleks dyr; konsultere Referanser å lære mer 

Referanser

Freedesktop.org systemd System and Service ManagerHere We Go Again, en annen Linux Init. Intro til systemd Anmeldelser