Mer systemd Fun: skylden spillet og stoppe tjenester med Prejudice

systemd, Lennart Poettering nye init system som tar Linux verden med storm, er alle fulle av små triks og behandler. I dag skal vi spille sakte-boot skylden spillet, og lære hvordan stoppe tjenester så helt dårlig ting vil aldri løpe igjen.

Stomping Services

I gamle dager sysvinit det var flere måter å stoppe en tjeneste:

Midlertidig fra kommandolinjen, som /etc/init.d/servicename stopp, eller en tjeneste tjeneste stopp

Endre dens oppstart lenke i /etc /rc n
.d fra Sfoo til Kfoo

Fjern alle init skript

Som ikke alltid gjør jobben fordi noen ganger er det lurte seg et skript for å starte den automatisk at omgås init skript, slik at du måtte jakte dette ned og endre det

I Managing Services på Linux med systemd vi lært hvordan systemd forenkler starte og stoppe tjenester, både per-session og ved oppstart. systemd har enda en måte å stoppe tjenester, og det er å stoppe dem så fullstendig at de aldri vil starte igjen. Eller i det minste ikke før du ombestemmer deg og gjøre dem til å begynne på nytt. Dette er hvordan å stoppe et kjørende tjenesten midlertidig:

# systemctl stoppe servicename.service

Dette stopper den fra å starte ved oppstart, men stopper ikke en løpende tjeneste:

# systemctl deaktivere servicename.service

At også hindrer den fra å bli startet med noe annet, for eksempel å plugge i noen maskinvare, eller via stikkontakt eller buss aktivering. Men du kan fortsatt starte og stoppe det manuelt. Og det er en måte å virkelig virkelig stoppe en tjeneste for godt, kort av å avinstallere den, og det er å maskere det ved å knytte det til /dev /null:


 # ln -s /dev /null /etc/systemd/system/servicename.service# systemctl daemon-reload 


Når du gjør dette kan du ikke engang starte tjenesten manuelt. Ingenting kan røre det. Etter å ha blitt plaget av mystiske skript som snek seg rundt bak ryggen min og startet på nytt tjenestene jeg ønsket drept på sysvinit distroer, jeg liker denne kommandoen mye. Enheten filer i /etc /systemd /system overstyring /lib /systemd /system, som har samme navn. Med mindre du har valgt Linux distro gjør noe rart, /etc /systemd /system er for systemadministratorer og /lib /systemd /system er for din distro Maintainers, for å konfigurere pakkehåndteringen. Så maskering skal overleve systemoppdateringer.

Hva om du ombestemmer deg? Pish tosh, er det enkelt. Bare slette symlink og kjøre systemctl aktiver servicename.service

Mens vi er her, la oss snakke om to reload kommandoer:. Daemon-reload og lesse. Nissen-reload alternativet laster hele systemd Configuration Manager uten å forstyrre aktive tjenester. reload laster konfigurasjonsfiler for spesifikke tjenester uten å forstyrre service, som dette:

# systemctl reload servicename.service

Denne laster selve konfigurasjonsfilen som brukes av hardfør sysadmin, for eksempel /etc /ssh /sshd_config fil for en SSH-server, og ikke dens systemd enhet fil, sshd.service. Så dette er hva du skal bruke når du gjør konfigurasjonsendringer.

pekefingeren av Slow Boot Blame

Boot ganger synes å være en enda større besettelse enn oppetid for noen folk, og mye av energi går inn trimming oppstarttid. Tiden det tar for en PC til boot styres av to ting:. Hvor lang BIOS tar å gjøre sin del, og deretter operativsystemet

Det er ikke mye vi kan gjøre med BIOS ganger. Noen er raske, noen er treg, og med mindre du bruker et system med OpenBIOS du er på nåde av hovedkortet ditt leverandøren. PC BIOS har ikke kommet mye siden starten lo så mange tiår siden, med unntak av tilbakevendende forsøk på å låse brukerne ut og kontrollere hva vi kan installere på våre egne datamaskiner, som jeg tror er ganske trist. Med quad-core systemer like vanlig som støvmidd synes det en datamaskin bør starte så fort som flicking en lysbryter.

Men jeg komme bort fra emnet, fordi vi skal snakke om systemd. systemd rapporter til syslog en boot-tid sammendraget, som dette eksemplet fra Fedora 16 XFCE i /var /log /messages:

9 januar 06:30:13 fedora-verne systemd [1]: Startup ferdig i 2s 817ms 839us (kernel) + 4s 629ms 345us (initrd) + 1min 11s 618ms 643us (userspace) = 1min 19s 65ms 827us

Så dette viser at kjernen ble startet i 2 sekunder og endring, initrd tok 4 sekunder og endring, og og alt annet tok over et minutt nitten sekunder. For alt vi har fått høre hvordan sysvinit er som alle langsom og systemd er ment å være raskere, dette virker som en lang tid. (Selv om det er raskere enn Windows 7 på samme maskin, som trenger 6 minutter til helt laste all OEM crap og ad-ware.) Så hva som tar så lang tid? Vi kan finne ut med systemd-analysere skylden kommando, da dette tekstutdraget viser:


 $ systemd-analysere skylden 60057ms sendmail.service 51241ms firstboot-graphical.service 3574ms sshd-keygen.service 3439ms NetworkManager.service 3101ms udev-settle.service 3025ms netfs.service 2411ms iptables.service 2411ms ip6tables.service 2173ms abrtd.service 2149ms nfs-idmap.service 2116ms systemd-logind.service 2097ms avahi-daemon.service 1337ms iscsi.service 


Sendmail? Firstboot grafisk tjeneste? Iptables? Avahi? ISCSI ?? Dette er fra en fersk Fedora installasjon, så jeg har mye housecleaning å gjøre. Det er noen begrensninger i denne kommandoen: den viser ikke hvilke tjenester som starter i parallell eller hva som holder opp de som tar lengre tid. Men det viser meg mye langsomme tjenester som ikke trenger å kjøre i det hele tatt på mitt system.

Hvis du liker pene grafer systemd inkluderer en kul kommando for automatisk generering av en SVG bilde fra skylden utgang , som dette:

$ systemd-analysere plott > graph1.svg

Du kan se denne fine grafen i Eye of GNOME bildeviser, eller GIMP via SVG plugin. Figur 1 viser hvordan det ser ut.

Dette betyr ikke fortelle deg mye mer enn tekst utgang av systemd-analysere skylden, men det ser pen og kanskje gi deg noen ledetråder der flaskehalsene er. Anmeldelser