Intro til systemd køyrenivå og Service Management Commands


I gamle dager hadde vi statiske køyrenivå. systemd har mekanismer for mer fleksibel og dynamisk kontroll over systemet ditt.

Før vi kommer til å lære mer nyttige systemd kommandoer, la oss ta en liten tur ned memory lane. Det er denne rare motsetningen i Linux-land, hvor Linux og FOSS er alltid skyve fremover og utvikler seg, og folk er alltid klagende om det. Det er derfor jeg tar alt dette anti-systemd oppstyr med en klype salt, fordi jeg husker da:

Pakker var onde, fordi ekte Linux-brukere bygd alt fra kildekoden og holdt streng kontroll av hva som gikk på sine systemer.

Avhengighet-løse pakke ledere var onde, fordi ekte Linux-brukere løst avhengighets hells manuelt.

Med unntak av apt-get, som alltid var bra, så bare Yum var onde.

Fordi Red Hat var Microsoft til Linux.

Yay Ubuntu!

Boo susing Ubuntu!

Og av og på ... som jeg har sagt lo så mange ganger før, endringer er opprørende. De rotet med vår arbeidsflyt, som er ingen liten ting fordi noen avbrudd har en reell produktivitet kostnad. Men vi er fortsatt i spedbarnsstadiet av databehandling, så det kommer til å holde endring og fremme raskt i lang tid. Jeg er sikker på at du kjenner folk som står fast i tankegangen at når du kjøper noe, som en skiftenøkkel eller et møbel eller en rosa flamingo plen ornament, er det alltid. Dette er folk som fortsatt kjører Windows Vista, eller guddom hjelpe oss Windows 95 på noen gamle, svak PC med en CRT-skjerm, og som ikke forstår hvorfor du fortsetter å plage dem til å erstatte den. Den fortsatt fungerer, ikke sant?

Det minner meg om min største triumf i å holde en gammel datamaskin som kjører lenge etter at det skulle ha blitt pensjonert. Det var en gang en venn hadde denne lille gamle 286 kjører noen gamle versjonen av MS-DOS. Hun brukte den for noen grunnleggende oppgaver som avtaler, dagbok, og litt gammelt regnskap program som jeg skrev i BASIC for henne sjekken register. Hvem bryr seg om sikkerhetsoppdateringer, ikke sant? Det er ikke koblet til noe nettverk. Så fra tid til annen jeg byttet ut en og annen mislyktes motstand eller kondensator, strømforsyning, og CMOS-batteriet. Det bare fortsatte. Hennes lille gamle rav CRT-skjerm vokste svakere og svakere, og til slutt det døde etter 20+ års tjeneste. Nå er hun bruker en gammel Thinkpad kjører Linux for de samme oppgavene.

Hvis det er et moralsk til dette tangerer det rømming meg, så la oss få opptatt med systemd.

køyrenivå vs. States

sysvinit bruker statiske køyrenivå for å skape ulike stater å starte opp, og de fleste distroer bruker fem:

Single-user mode

Multi-user modus uten startet nettverkstjenester

Multi-user modus med nettverkstjenester startet

System nedleggelse

System omstart.

Meg, jeg ser ikke mye praktisk verdi i å ha flere køyrenivå, men det er de. I stedet for køyrenivå, lar systemd deg lage forskjellige statene
, som gir deg en fleksibel mekanisme for å skape forskjellige konfigurasjoner for å starte opp. Disse statene er sammensatt av flere enheter filene samlet sammen i mål
. Targets har fine beskrivende navn i stedet for tall. Enhet filer kontrollere tjenester, enheter, stikkontakter, og fester. Du kan se hvordan disse ser ut ved å undersøke ferdighus målene som kommer med systemd, for eksempel /usr/lib/systemd/system/graphical.target, som er standard på CentOS 7:

 [Enhet] Beskrivelse = Graphical InterfaceDocumentation=man:systemd.special(7)Requires=multi-user.targetAfter=multi-user.targetConflicts=rescue.targetWants=display-manager.serviceAllowIsolate=yes[Install]Alias=default.target

So hva gjør enhetsfilene ser ut? La oss kikke inn en. Enhet filer er i to kataloger:

/etc /systemd /system /

/usr /lib /systemd /system /

Den første er for oss å spille med, og den andre er hvor pakker installere enhetsfiler. /etc /systemd /system /forrang over /usr /lib /systemd /system /. Hurrah, human enn maskin. Dette er enheten filen til Apache webserver:

 [Enhet] Description = The Apache HTTP ServerAfter = network.target fjern fs.target NSS-lookup.target [Service] type = notifyEnvironmentFile = /etc /sysconfig /httpdExecStart = /usr /sbin /httpd /$ ALTERNATIVER -DFOREGROUNDExecReload = /usr /sbin /httpd $ ALTERNATIVER k gracefulExecStop = /bin /drepe -WINCH $ {MAINPID} KillSignal = SIGCONTPrivateTmp = true [Installer] WantedBy = multi. user.target 

Disse filene er ganske forståelig selv for systemd nykommere, og enhets filer er ganske mye enklere enn en sysvinit init-fil, som denne tekstutdrag fra /etc/init.d/apache2 show:

 SCRIPTNAME = "$ {0 ## * /}« SCRIPTNAME = "$ {SCRIPTNAME ## [KS] [0-9] [0-9]}" hvis [-n "$ APACHE_CONFDIR"]; så hvis ["$ {APACHE_CONFDIR ## /etc /apache2-}" = "$ {APACHE_CONFDIR}"!]; deretter DIR_SUFFIX = "$ {APACHE_CONFDIR ## /etc /apache2-}" annet DIR_SUFFIX = 

Hele filen er 410 linjer.

Du kan vise enhetsavhengigheter, og det er alltid overraskende for meg hvor komplekse de er:

 $ systemctl listeavhengig httpd.service 
cgroups

cgroups, eller kontrollgrupper, har vært til stede i Linux-kjernen i noen år, men har ikke vært brukt veldig mye inntil systemd. Dokumentasjonen kernel sier: "kontrollgrupper gir en mekanisme for å samle /partisjone sett av oppgaver, og alle deres fremtidige barn, inn i hierarkiske grupper med spesialiserte atferd." Med andre ord, har det potensial til å kontrollere, begrense og fordele ressursene på flere nyttige måter. systemd bruker cgroups, og du kan se dem. Dette viser hele cgroup treet:

 $ systemd-cgls 

Du kan generere et annet syn med den gode gamle ps kommando:

 $ ps xawf -eo pid, bruker, cgroup, args 
Nyttige kommandoer

Denne kommandoen laster konfigurasjonsfilen fra en daemon, og ikke dens systemd tjenesten fil. Bruk denne når du gjør en konfigurasjonsendring og vil aktivere den med minst avbrudd, som dette eksemplet for Apache:

 # systemctl reload httpd.service 

Vedåoppdatera en tjeneste fil helt stopper og starter deretter en tjeneste. Hvis det ikke kjører dette begynner det:

 # systemctl restart httpd.service 

Du kan starte alle nisser med én kommando. Denne laster alle enhetsfiler, og gjenskaper hele systemd avhengighetsforhold:

 # systemctl daemon-reload 

Du kan starte, suspendere, og poweroff som en vanlig svakstilte bruker:

 $ systemctl omstart $ systemctl suspen $ systemctl poweroff 

Som alltid, det er mye, mye mer å lære om systemd. Here We Go Again, en annen Linux Init: til Intro systemd og forstå og bruke systemd er gode introduksjoner til systemd, med lenker til mer detaljerte ressurser
.