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: 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: 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. 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: 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
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
# ln -s /dev /null /etc/systemd/system/servicename.service# systemctl daemon-reload
pekefingeren av Slow Boot Blame
$ 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