LFCS: Upravljanje postopka zagona sistema in storitev (SysVinit, Systemd in Upstart) - 7. del


Pred nekaj meseci je Linux Foundation objavil certifikat LFCS (Linux Foundation Certified Sysadmin), vznemirljiv nov program, katerega cilj je, da posamezniki z vseh koncev sveta pridobijo certifikat za izvajanje osnovnih do vmesnih nalog skrbništva sistema v sistemih Linux. To vključuje podporo že delujočim sistemom in storitvam, skupaj z iskanjem in analizo težav iz prve roke ter možnostjo odločitve, kdaj bodo vprašanja postavljali inženirskim skupinam.

Naslednji video opisuje kratek uvod v program certificiranja Linux Foundation.

Ta objava je 7. del 10-vadnice, tukaj v tem delu bomo razložili, kako upravljati proces zagona sistema Linux in storitve, ki so potrebne za izpit za certificiranje LFCS.

Upravljanje zagonskega procesa Linuxa

Proces zagona sistema Linux je sestavljen iz več faz, od katerih je vsaka predstavljena z drugo komponento. Naslednji diagram na kratko povzema postopek zagona in prikazuje vse glavne vključene komponente.

Ko na svoji napravi pritisnete gumb Vklop , vdelana programska oprema, ki je shranjena v čipu EEPROM na matični plošči, inicializira POST ( Preizkus ob vklopu ) za preverjanje stanja strojne opreme sistema. Ko je POST končan, vdelana programska oprema poišče in naloži zagonski nalagalnik 1. stopnje , ki se nahaja v MBR ali EFI particijo prvega razpoložljivega diska in ji daje nadzor.

MBR se nahaja v prvem sektorju diska, ki je v nastavitvah BIOS označen kot zagonski in je velik 512 bajtov.

  1. Prvih 446 bajtov : zagonski nalagalnik vsebuje tako izvršljivo kodo kot besedilo sporočila o napaki.
  2. Naslednjih 64 bajtov : Tabela particij vsebuje zapis za vsako od štirih particij (primarno ali razširjeno). Vsak zapis med drugim prikazuje stanje (aktivno/neaktivno), velikost in začetni/končni sektor vsake particije.
  3. Zadnja 2 bajta : Čarobna številka služi kot preverjanje veljavnosti MBR.

Naslednji ukaz izvede varnostno kopijo MBR (v tem primeru je /dev/sda prvi trdi disk). Nastala datoteka mbr.bkp vam lahko pride v poštev, če particijska tabela postane poškodovana, na primer sistem postane neobnovljiv.

Seveda ga bomo morali kasneje uporabiti, če se bo pojavila potreba, shraniti in shraniti nekam drugam (na primer pogon USB ). Ta datoteka nam bo pomagala obnoviti MBR in nas bo spet začela, če in le, če medtem ne bomo spremenili postavitve trdega diska.

# dd if=/dev/sda of=mbr.bkp bs=512 count=1
# dd if=mbr.bkp of=/dev/sda bs=512 count=1

Za sisteme, ki uporabljajo metodo EFI / UEFI , vdelana programska oprema UEFI prebere svoje nastavitve, da določi, katera aplikacija UEFI se bo zagnala in od kod (tj. Na katerem disku in particiji Se nahaja particija EFI).

Nato se naloži in zažene zagonski nalagalnik 2. stopnje (imenovan tudi upravitelj zagona). GRUB [ GRand Unified Boot ] je najpogosteje uporabljen zagonski upravitelj v Linuxu. V večini sistemov, ki se danes uporabljajo, je mogoče najti eno od dveh različic.

  1. Starejša konfiguracijska datoteka GRUB : /boot/grub/menu.lst (starejše distribucije, ki jih ne podpirajo vdelane programske opreme EFI/UEFI).
  2. Konfiguracijska datoteka GRUB2 : najverjetneje/etc/default/grub.

Čeprav cilji izpita LFCS izrecno ne zahtevajo znanja o notranjih delih GRUB , če ste pogumni in si lahko privoščite nered v sistemu (morda boste želeli preizkusiti najprej na navideznem računalniku, za vsak slučaj), morate zagnati.

# update-grub

Kot koren po spremembi konfiguracije GRUB-a, da boste lahko uporabili spremembe.

V bistvu GRUB naloži privzeto jedro in sliko initrd ali initramfs . Z nekaj besedami initrd ali initramfs pomagajo izvesti zaznavanje strojne opreme, nalaganje modula jedra in odkritje naprave, potrebne za namestitev pravega korenskega datotečnega sistema.

Ko zažene pravi korenski datotečni sistem, jedro zažene upravitelja sistema in storitev ( init ali systemd , katerega identifikacija procesa ali PID je vedno 1), da začne običajni uporabniški vesoljski postopek za predstavitev uporabniškega vmesnika.

Tako init kot systemd sta demona (procesi v ozadju), ki upravljata druge demone, kot prva storitev, ki se zažene (med zagonom), in zadnja storitev, ki se konča (med zaustavitvijo).

Zagon storitev (SysVinit)

Koncept ravni izvajanja v Linuxu določa različne načine uporabe sistema z nadzorom, katere storitve se izvajajo. Z drugimi besedami, stopnja izvajanja nadzoruje, katere naloge je mogoče izvesti v trenutnem stanju izvajanja = stopnja izvajanja (in katere ne).

Običajno je bil ta postopek zagona izveden na podlagi konvencij, ki izvirajo iz System V UNIX , pri čemer je sistem prenašal izvrševanje zbirk skriptov, ki zaženejo in zaustavijo storitve, ko je naprava vstopila v določeno stopnjo izvajanja (ki, z drugimi besedami, , je drugačen način delovanja sistema).

Znotraj vsakega nivoja izvajanja lahko posamezne storitve nastavite tako, da se izvajajo, ali pa jih izklopite, če se izvajajo. Najnovejše različice nekaterih glavnih distribucij se oddaljujejo od standarda System V v korist precej novega upravitelja storitev in sistema, imenovanega systemd (kar pomeni sistemski demon), vendar običajno podpirajo ukaze sysv zaradi združljivosti. To pomeni, da lahko večino dobro znanih orodij za zagon sysv zaženete v sistemski distribuciji.

Preberite tudi : Zakaj "systemd" v Linuxu nadomešča "init"

Poleg začetka sistemskega procesa init poišče datoteko /etc/inittab , da se odloči, katero stopnjo izvajanja je treba vnesti.

Če želite preklapljati med ravnmi teka, lahko z ukazom init : init N (kjer je N ena od zgoraj naštetih stopenj tečaja) preprosto spremenimo raven teka. Upoštevajte, da to ni priporočljiv način za prenašanje delujočega sistema na drugo raven izvajanja, ker ne daje opozorila obstoječim prijavljenim uporabnikom (zaradi česar izgubijo delo in procesi se nenavadno zaključijo).

Namesto tega je treba za ponovni zagon sistema uporabiti ukaz shutdown (ki najprej pošlje opozorilno sporočilo vsem prijavljenim uporabnikom in blokira vse nadaljnje prijave; nato init signalizira, da preklopi med nivoji izvajanja); vendar je treba privzeto stopnjo zagon (tisto, s katero se bo sistem zagnal) najprej urediti v datoteki /etc/inittab .

Iz tega razloga sledite tem korakom za pravilno preklapljanje med nivoji izvajanja. Kot root poiščite naslednjo vrstico v /etc/inittab .

id:2:initdefault:

in spremenite številko 2 za želeno stopnjo izvajanja z želenim urejevalnikom besedil, na primer vim (opisano v Kako uporabljati urejevalnik vi/vim v Linuxu - 2. del te serije).

Nato zaženite kot root.

# shutdown -r now

Ta zadnji ukaz bo znova zagnal sistem, zaradi česar se bo med naslednjim zagonom zagnal na določeni ravni izvajanja in bo zagnal skripte, ki se nahajajo v /etc/rc[runlevel].d imenik, da se odločite, katere storitve je treba zagnati in katere ne. Na primer za stopnjo 2 v naslednjem sistemu.

Če želimo omogočiti ali onemogočiti sistemske storitve ob zagonu, bomo uporabili ukaz chkconfig v CentOS/openSUSE in sysv-rc-conf v Debianu in izpeljanih finančnih instrumentih. To orodje nam lahko tudi pokaže, kakšno je prednastavljeno stanje storitve za določeno stopnjo izvajanja.

Preberite tudi : Kako ustaviti in onemogočiti neželene storitve v Linuxu

Navedba konfiguracije ravni izvajanja za storitev.

# chkconfig --list [service name]
# chkconfig --list postfix
# chkconfig --list mysqld

Na zgornji sliki lahko vidimo, da se postfix nastavi tako, da sistem vstopi v stopnje od 2 do 5 , medtem ko mysqld bo privzeto zagnan za stopnje od 2 do 4 . Zdaj pa predpostavimo, da to ni pričakovano vedenje.

Na primer, vklopiti moramo tudi mysqld za stopnjo 5 in izklopiti postfix za stopnji 4 in 5. Evo, kaj bi naredili v vsakem primeru (zaženite naslednji ukazi kot root).

# chkconfig --level [level(s)] service on
# chkconfig --level 5 mysqld on
# chkconfig --level [level(s)] service off
# chkconfig --level 45 postfix off

Zdaj bomo podobne naloge izvajali v sistemu, ki temelji na Debianu z uporabo sysv-rc-conf .

Konfiguriranje storitve za samodejni zagon na določeni ravni izvajanja in preprečitev njenega zagona na vseh drugih.

1. Uporabite naslednji ukaz, da si ogledate, katere stopnje izvajanja so nastavljene za zagon mdadm .

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

2. Uporabili bomo sysv-rc-conf , da preprečimo zagon mdadm na vseh ravneh izvajanja, razen na 2 . Samo označite ali počistite (s preslednico) po želji (s puščičnimi tipkami se lahko premikate gor, dol, levo in desno).

# sysv-rc-conf

Nato pritisnite q za izhod.

3. Ponovno bomo zagnali sistem in znova zagnali ukaz iz KORAK 1 .

# ls -l /etc/rc[0-6].d | grep -E 'rc[0-6]|mdadm'

Na zgornji sliki lahko vidimo, da je mdadm nastavljen za zagon samo na ravni 2 .

Kaj pa systemd?

systemd je še ena storitev in sistemski upravitelj, ki jo sprejema več glavnih distribucij Linuxa. Njegov namen je omogočiti več vzporedne obdelave med zagonom sistema (za razliko od sysvinit , ki je ponavadi počasnejši, ker zažene procese enega za drugim, preveri, ali je eden odvisen od drugega, in čaka na demoni, da se lahko zažene več storitev) in služi kot dinamično upravljanje virov delujočemu sistemu.

Tako se storitve po potrebi zaženejo (da se izognemo porabi sistemskih virov), namesto da bi se med zagonom zagnale brez trdnega razloga.

Če si želite ogledati stanje vseh procesov, ki se izvajajo v vašem sistemu, tako sistemd izvornih kot storitev SysV , zaženite naslednji ukaz.

# systemctl

Stolpec LOAD prikazuje, ali je bila definicija enote (glejte stolpec UNIT , ki prikazuje storitev ali kar koli, kar vzdržuje systemd) pravilno naložena, medtem ko je AKTIVNO in SUB stolpca prikazujeta trenutno stanje take enote.

Ko stolpec AKTIVEN kaže, da stanje enote ni aktivno, lahko z uporabo preverimo, kaj se je zgodilo.

# systemctl status [unit]

Na zgornji sliki je na primer media-samba.mount v neuspelem stanju. Tečimo.

# systemctl status media-samba.mount

Vidimo, da media-samba.mount ni uspel, ker postopek namestitve na gostitelju dev1 ni mogel najti omrežnega deleža na //192.168.0.10/gacanepa .

Zagon ali ustavitev storitev

Ko postane omrežna skupna raba //192.168.0.10/gacanepa na voljo, poskusimo zagnati, nato ustaviti in na koncu znova zagnati enoto media-samba.mount . Po izvedbi vsakega dejanja zaženimo systemctl status media-samba.mount, da preverimo njegovo stanje.

# systemctl start media-samba.mount
# systemctl status media-samba.mount
# systemctl stop media-samba.mount
# systemctl restart media-samba.mount
# systemctl status media-samba.mount

Pod systemd lahko omogočite ali onemogočite storitev, ko se zažene.

# systemctl enable [service] 		# enable a service 
# systemctl disable [service] 		# prevent a service from starting at boot

Postopek omogočanja ali onemogočanja samodejnega zagona storitve ob zagonu vključuje dodajanje ali odstranjevanje simboličnih povezav v imeniku /etc/systemd/system/multi-user.target.wants .

Trenutno stanje storitve (omogočeno ali onemogočeno) lahko ugotovite z ukazom.

# systemctl is-enabled [service]

Na primer

# systemctl is-enabled postfix.service

Poleg tega lahko sistem znova zaženete ali zaustavite.

# systemctl reboot
# systemctl shutdown

Upstart

Upstart je na osnovi dogodkov nadomestitev demona /sbin/init in je nastal iz potrebe po zagonu storitev le, kadar so potrebne (tudi nadzor nad njimi, medtem ko se izvajajo) in obdelujejo dogodke, ko se pojavijo, s čimer presežejo klasični sistem sysvinit, ki temelji na odvisnosti.

Prvotno je bil razvit za distribucijo Ubuntu, vendar se uporablja v Red Hat Enterprise Linux 6.0. Čeprav naj bi bil primeren za uvajanje v vseh distribucijah Linuxa kot nadomestek za sysvinit , ga je sčasoma zasenčil systemd . 14. februarja 2014 je Mark Shuttleworth (ustanovitelj Canonical Ltd.) napovedal, da bo v prihodnjih izdajah Ubuntuja kot privzeti demon init uporabljen systemd.

Ker je bil zagonski skript SysV za sistem tako pogost že tako dolgo, veliko število programskih paketov vključuje zagonske skripte SysV. Za namestitev takšnih paketov ponuja Upstart način združljivosti: na običajnih lokacijah izvaja zagonske skripte SysV ( /etc/rc.d/rc?.d , /etc/init.d/ rc? .d , /etc/rc?.d ali podobna lokacija). Če torej namestimo paket, ki še ne vključuje konfiguracijskega skripta Upstart, se mora še vedno zagnati na običajen način.

Poleg tega, če smo namestili pripomočke, kot je chkconfig, bi jih lahko uporabljali za upravljanje svojih storitev, ki temeljijo na SysV, tako kot bi to počeli v sistemih, ki temeljijo na sysvinit.

Upstart skripte podpirajo tudi zagon ali zaustavitev storitev, ki temeljijo na večjem številu dejanj kot zagonski skripti SysV; na primer, Upstart lahko zažene storitev, kadar koli je pritrjena določena naprava.

Sistem, ki uporablja Upstart in njegove izvorne skripte, izključno nadomešča datoteko /etc/inittab in imenike zagonskih skriptov SysV , specifične za nivo izvajanja, z .conf skripte v imeniku /etc/init .

Ti skripti * .conf (znani tudi kot definicije opravil) na splošno sestavljajo naslednje:

    1. Opis postopka.
    2. Stopnje izvajanja, kjer bi se moral postopek izvajati, ali dogodki, ki bi ga morali sprožiti.
    3. Stopnje izvajanja, kjer je treba postopek ustaviti, ali dogodki, ki bi ga morali ustaviti.
    4. Možnosti.
    5. Ukaz za zagon procesa.

    Na primer

    # My test service - Upstart script demo description "Here goes the description of 'My test service'" author "Dave Null <[email >"
    # Stanzas
    
    #
    # Stanzas define when and how a process is started and stopped
    # See a list of stanzas here: http://upstart.ubuntu.com/wiki/Stanzas#respawn
    # When to start the service
    start on runlevel [2345]
    # When to stop the service
    stop on runlevel [016]
    # Automatically restart process in case of crash
    respawn
    # Specify working directory
    chdir /home/dave/myfiles
    # Specify the process/command (add arguments if needed) to run
    exec bash backup.sh arg1 arg2
    

    Če želite uveljaviti spremembe, boste morali povedati upstartu, naj znova naloži svojo konfiguracijo.

    # initctl reload-configuration
    

    Nato začnite svoje delo, tako da vnesete naslednji ukaz.

    $ sudo start yourjobname
    

    Kjer je vašeime_oseb ime opravila, ki je bilo prej dodano s skriptom vaše ime_dnevnika.conf .

    Podrobnejši in podrobnejši referenčni vodnik za Upstart je na voljo na spletnem mestu projekta v meniju\"Cookbook".

    Povzetek

    Poznavanje zagonskega postopka Linuxa je potrebno, da vam pomaga pri odpravljanju težav ter pri prilagajanju zmogljivosti in izvajanja storitev računalnika vašim potrebam.

    V tem članku smo analizirali, kaj se zgodi od trenutka, ko pritisnete stikalo Vklop , da vklopite napravo, dokler ne dobite popolnoma delujočega uporabniškega vmesnika. Upam, da ste se tega naučili brati tako kot jaz, ko sem ga sestavljal. Svoje komentarje ali vprašanja lahko pustite spodaj. Vedno se veselimo zaslišanja naših bralcev!