LFCS: Managing System Startup Process and Services (SysVinit, Systemd and Upstart) - Deel 7


Virun e puer Méint huet d'Linux Foundation d'LFCS (Linux Foundation Certified Sysadmin) Zertifizéierung ugekënnegt, e spannenden neie Programm deem säin Ziel et erlaabt Individuen aus allen Enner vun der Welt zertifizéiert ze ginn fir Basis bis Zwëschensystemverwaltungsaufgaben op Linux Systemer ze maachen. Dëst beinhalt d'Ënnerstëtzung vu scho lafende Systemer a Servicer, zesumme mat der éischter Hand Problemfannen an Analyse, plus d'Fäegkeet fir ze entscheeden wéini d'Problemer zu Ingenieursteams opgeworf ginn.

De folgende Video beschreift eng kuerz Aféierung an The Linux Foundation Certification Program.

Dëse Post ass Deel 7 vun enger 10-Tutorial Serie, hei an dësem Deel erkläre mir wéi Dir de Linux System Startup Prozess a Servicer verwalten, déi fir den LFCS Zertifizéierungsexamen erfuerderlech sinn.

Gestioun vum Linux Startup Prozess

De Bootprozess vun engem Linux System besteet aus verschiddene Phasen, jidderee vun enger anerer Komponent vertrueden. Déi folgend Diagramm resüméiert kuerz de Bootprozess a weist all déi involvéiert Haaptkomponenten.

Wann Dir den Power Knäppchen op Ärer Maschinn dréckt, initialiséiert d'Firmware déi an engem EEPROM Chip am Motherboard gespäichert ass den POST ( Power-On Self Test) fir den Zoustand vun den Hardwareressourcen vum System ze kontrolléieren. Wann de POST fäerdeg ass, sicht d'Firmware dann den 1st Stage Bootloader, deen am MBR oder am EFI läit Partition vun der éischter disponibeler Disk, a gëtt et Kontroll.

De MBR ass am éischte Secteur vun der Scheif, déi als bootbar an den BIOS Astellunge markéiert ass, an ass 512 Bytes grouss.

  1. Éischt 446 Bytes: De Bootloader enthält souwuel ausführbare Code wéi och Feelermeldungstext.
  2. Nächst 64 Bytes: D'Partitionstabel enthält e Rekord fir all véier Partitionen (primär oder erweidert). Ënner anerem weist all Rekord de Status (aktiv/net aktiv), Gréisst an Start/Enn Secteuren vun all Partition un.
  3. Lescht 2 Bytes: Déi magesch Zuel déngt als Validatiounscheck vum MBR.

De folgende Kommando mécht e Backup vum MBR (an dësem Beispill ass /dev/sda déi éischt Festplack). Déi doraus resultéierend Datei, mbr.bkp kann nëtzlech kommen wann d'Partitionstabel korrupt gëtt, zum Beispill, de System unbootbar ze maachen.

Natierlech, fir se spéider ze benotzen, wann et néideg ass, musse mir et späicheren an anzwousch anescht späicheren (wéi zum Beispill e USB Drive, zum Beispill). Dee Fichier hëlleft eis den MBR ze restauréieren a bréngt eis nach eng Kéier op d'Been, wa mir an der Tëschenzäit den Harddisk-Layout net änneren.

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

Fir Systemer déi d'Method EFI/UEFI benotzen, liest d'UEFI Firmware seng Astellunge fir ze bestëmmen wéi eng UEFI Applikatioun lancéiert gëtt a vu wou (d.h. a wéi enger Disk a Partition den EFI Partition ass lokaliséiert).

Als nächst gëtt den 2. GRUB [GRand Unified Boot] ass deen am meeschte benotzte Bootmanager am Linux. Eng vun zwou verschidde Versioune kann op de meeschte Systemer fonnt ginn, déi haut benotzt ginn.

  1. GRUB Legacy Konfiguratiounsdatei: /boot/grub/menu.lst (eeler Verdeelungen, net vun EFI/UEFI Firmware ënnerstëtzt).
  2. GRUB2 Konfiguratiounsdatei: héchstwahrscheinlech /etc/default/grub.

Och wann d'Ziler vum LFCS Examen net explizit Wëssen iwwer GRUB Interne froen, wann Dir dapere sidd an et Iech leeschte kënnt Äre System ze vermëschen (Dir wëllt et vläicht probéieren éischt op enger virtueller Maschinn, just am Fall), musst Dir lafen.

# update-grub

Als root no der Ännerung vun der GRUB Konfiguratioun fir d'Ännerungen z'applizéieren.

Prinzipiell lued GRUB den Default Kernel an den initrd oder initramfs Bild. An e puer Wierder, initrd oder initramfs hëllefen d'Hardware Detektioun auszeféieren, de Kernel Modul Luede an d'Entdeckung vum Apparat néideg fir de richtege Root Dateiesystem montéiert ze kréien.

Wann de richtege Root Dateiesystem op ass, fiert de Kernel de System- a Servicemanager aus (init oder systemd, deem seng Prozessidentifikatioun oder PID ëmmer 1 ass) fir den normale Benotzer- Space Boot Prozess fir e Benotzerinterface ze presentéieren.

Béid init an systemd sinn Daemonen (Hannergrondprozesser) déi aner Daemone verwalten, als éischten Service fir ze starten (während dem Boot) an dee leschte Service fir ofzeschléissen (während der Shutdown).

Startservicer (SysVinit)

D'Konzept vun runlevels am Linux spezifizéiert verschidde Weeër fir e System ze benotzen andeems Dir kontrolléiert wéi eng Servicer lafen. An anere Wierder, e Runlevel kontrolléiert wéi eng Aufgaben am aktuellen Ausféierungszoustand = Runlevel kënne gemaach ginn (a wéi eng kënnen net).

Traditionell gouf dësen Startup-Prozess op Basis vu Konventiounen ausgeführt, déi mam System V UNIX entstanen sinn, mam System duerchgefouert Sammlunge vu Scripten auszeféieren, déi Servicer starten an stoppen, wéi d'Maschinn e spezifesche Runlevel erakënnt (wat, an anere Wierder , ass en anere Modus fir de System ze lafen).

Bannent all Runlevel kënnen individuell Servicer agestallt ginn fir ze lafen, oder fir auszeschalten wann se lafen. Déi lescht Versioune vun e puer grouss Verdeelunge plënneren ewech vum System V Standard zugonschte vun engem zimlech neie Service a Systemmanager mam Numm systemd (wat fir System Daemon steet), awer normalerweis Ënnerstëtzt sysv Kommandoen fir Kompatibilitéitszwecker. Dëst bedeit datt Dir déi meescht vun de bekannte sysv Init Tools an enger systemd-baséierter Verdeelung ausféiere kënnt.

Lies Och: Firwat 'systemd' 'init' am Linux ersetzt

Nieft dem Systemprozess unzefänken, kuckt init op d'Datei /etc/inittab fir ze entscheeden wéi ee Runlevel aginn muss.

Fir tëscht Runlevelen ze wiesselen, kënne mir einfach eng Runlevel Ännerung ausginn andeems Dir de Kommando init benotzt: init N (wou N ee vun de Runlevels ass, déi hei uewen opgezielt sinn). Notéiert w.e.g. datt dëst net de recommandéierte Wee ass fir e lafende System op en anere Runlevel ze huelen well et keng Warnung fir existent ageloggte Benotzer gëtt (doduerch datt se Aarbecht verléieren an d'Prozesser abnormal ophalen).

Amplaz soll de Kommando Shutdown benotzt ginn fir de System nei ze starten (deen als éischt eng Warnungsmeldung un all ageloggte Benotzer schéckt an all weider Login blockéiert; et signaliséiert dann Init fir Runlevels ze wiesselen); allerdéngs muss den Default-Runlevel (deen deen de System boott) als éischt an der /etc/inittab Datei geännert ginn.

Aus deem Grond, befollegt dës Schrëtt fir richteg tëscht Runlevels ze wiesselen, Als root, kuckt no der folgender Zeil an /etc/inittab.

id:2:initdefault:

a ännert d'Nummer 2 fir de gewënschten Runlevel mat Ärem gewënschte Texteditor, wéi vim (beschriwwen an Wéi benotzt Dir vi/vim Editor am Linux - Deel 2 vun dëser Serie).

Als nächst lafen als Root.

# shutdown -r now

Dat leschte Kommando wäert de System nei starten, sou datt et am spezifizéierte Runlevel wärend dem nächste Boot starten an d'Skripten ausféieren, déi am /etc/rc[runlevel].d Verzeechnes fir ze entscheeden wéi eng Servicer gestart ginn a wéi eng net. Zum Beispill, fir Runlevel 2 am folgende System.

Fir Systemservicer beim Boot z'aktivéieren oder auszeschalten, benotze mir chkconfig Kommando an CentOS/openSUSE an sysv-rc-conf an Debian an Derivate. Dëst Tool kann eis och weisen wat de virkonfiguréierten Zoustand vun engem Service fir e bestëmmte Runlevel ass.

Lies Och: Wéi stoppen an deaktivéieren Onerwënscht Servicer am Linux

Oplëschtung vun der Runlevel Konfiguratioun fir e Service.

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

Am uewe genannte Bild kënne mir gesinn datt Postfix gesat gëtt fir unzefänken wann de System Runlevels 2 bis 5 agitt, wärend mysqld b> wäert als Standard fir Runlevelen 2 bis 4 lafen. Stellt elo un datt dëst net dat erwaart Verhalen ass.

Zum Beispill musse mir mysqld fir Runlevel 5 och ausschalten, an de Postfix fir Runlevels 4 a 5 ausschalten. Hei ass wat mir an all Fall maachen folgend Kommandoen als Root).

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

Mir wäerten elo ähnlech Aufgaben an engem Debian-baséierten System mat sysv-rc-conf ausféieren.

E Service konfiguréieren fir automatesch op engem spezifesche Runlevel unzefänken an ze verhënneren datt et op all aneren ufänkt.

1. Loosst eis de folgende Kommando benotzen fir ze kucken wat d'Runlevels sinn, wou mdadm konfiguréiert ass fir ze starten.

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

2. Mir benotze sysv-rc-conf fir ze verhënneren datt mdadm op all Runlevels ausser 2 ufänkt. Just kontrolléiert oder decheckt (mat der Spacebar) wéi Dir wëllt (Dir kënnt erop, erof, lénks a riets mat de Pfeiltasten réckelen).

# sysv-rc-conf

Da dréckt q fir opzehalen.

3. Mir wäerten de System nei starten an erëm de Kommando aus SCHRËTT 1 lafen.

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

Am uewe genannte Bild kënne mir gesinn datt mdadm konfiguréiert ass fir nëmmen op Runlevel 2 ze starten.

Wat iwwer systemd?

systemd ass en anere Service a Systemmanager dee vu verschiddene grousse Linux Verdeelungen ugeholl gëtt. Et zielt et z'erméiglechen, datt méi Veraarbechtung parallel während dem Systemstartup gemaach gëtt (am Géigesaz zu sysvinit, deen ëmmer méi lues ass, well et Prozesser gläichzäiteg ufänkt, kontrolléiert ob een vun engem aneren hänkt, a waart op Daemone fir ze lancéieren sou datt méi Servicer kënnen ufänken), an als dynamesch Ressourcemanagement fir e lafende System ze déngen.

Also ginn Servicer gestart wann néideg (fir Systemressourcen ze vermeiden) anstatt ouni feste Grond beim Boot ze lancéieren.

Kuckt de Status vun all de Prozesser déi op Ärem System lafen, souwuel systemd gebierteg wéi och SysV Servicer, fuert de folgende Kommando.

# systemctl

D'Kolonn LOAD weist ob d'Eenheetsdefinitioun (kuckt op d'Kolonn UNIT, déi de Service weist oder alles wat vum systemd erhale gëtt) richteg gelueden ass, während d'AKTIV an SUB Kolonnen weisen den aktuelle Status vun esou enger Eenheet.

Wann d'Kolonn AKTIV weist datt de Status vun enger Eenheet anescht wéi aktiv ass, kënne mir iwwerpréiwen wat geschitt ass.

# systemctl status [unit]

Zum Beispill, am Bild hei uewen ass media-samba.mount an engem ausgefallenen Zoustand. Loosst eis lafen.

# systemctl status media-samba.mount

Mir kënne gesinn datt media-samba.mount gescheitert ass well de Mountprozess um Host dev1 den Netzdeele bei //192.168.0.10/gacanepa< net konnt fannen.

Starten oder Stoppen Servicer

Soubal d'Netzwierk //192.168.0.10/gacanepa verfügbar ass, loosst eis probéieren ze starten, da stoppen, a schliisslech d'Eenheet media-samba.mount nei starten. Nodeems Dir all Aktioun gemaach hutt, loosst eis systemctl status media-samba.mount lafen fir säi Status ze kontrolléieren.

# 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

Ënner systemd kënnt Dir e Service aktivéieren oder auszeschalten wann e boot.

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

De Prozess fir e Service z'aktivéieren oder auszeschalten fir automatesch beim Boot ze starten besteet aus der addéieren oder ewechhuelen vun symbolesche Linken am /etc/systemd/system/multi-user.target.wants Verzeichnis.

Alternativ kënnt Dir den aktuelle Status vun engem Service (aktivéiert oder behënnert) mam Kommando erausfannen.

# systemctl is-enabled [service]

Zum Beispill,

# systemctl is-enabled postfix.service

Zousätzlech kënnt Dir de System nei starten oder ausschalten mat.

# systemctl reboot
# systemctl shutdown

Upstart

Upstart ass en Event-baséiert Ersatz fir den /sbin/init Daemon a gouf gebuer aus der Bedierfnes fir nëmmen Servicer unzefänken, wann se gebraucht ginn (och iwwerwaacht se wärend se Lafen), an Ëmgank Evenementer wéi se geschéien, also de klassesche, Ofhängegkeet-baséiert sysvinit System iwwerschratt.

Et gouf ursprénglech fir d'Ubuntu Verdeelung entwéckelt, awer gëtt am Red Hat Enterprise Linux 6.0 benotzt. Obschonn et geduecht war fir gëeegent ze sinn an all Linux Verdeelungen als Ersatz fir sysvinit, gouf et mat der Zäit iwwerschësseg vun systemd. De 14. Februar 2014 huet de Mark Shuttleworth (Grënner vun Canonical Ltd.) ugekënnegt datt zukünfteg Verëffentlechungen vun Ubuntu systemd als Standard Init Daemon benotzen.

Well de SysV Startup-Skript fir de System esou laang esou heefeg war, enthält eng grouss Zuel vu Software-Paketen SysV Startup-Skripte. Fir sou Packagen z'empfänken, bitt Upstart e Kompatibilitéitsmodus: Et leeft SysV Startup Scripten op déi üblech Plazen (/etc/rc.d/rc?.d, /etc/init.d/ rc?.d, /etc/rc?.d, oder eng ähnlech Plaz). Also, wa mir e Package installéieren deen nach net en Upstart Konfiguratiounsskript enthält, sollt et nach ëmmer op déi üblech Manéier starten.

Ausserdeem, wa mir Utilities wéi chkconfig installéiert hunn, sollt Dir se benotze fir Är SysV-baséiert Servicer ze verwalten sou wéi mir op sysvinit-baséiert Systemer.

Upstart Scripten ënnerstëtzen och Start oder Stoppen Servicer baséiert op enger méi grousser Villfalt vun Aktiounen wéi SysV Startup Scripten; zum Beispill, Upstart kann e Service starten wann e bestëmmten Hardware-Apparat befestegt ass.

E System deen Upstart a seng gebierteg Scripte benotzt, ersetzt exklusiv d'/etc/inittab Datei an déi runlevel-spezifesch SysV Startup Script Verzeichnisser mat .conf Scripten am /etc/init Verzeichnis.

Dës *.conf Skripte (och bekannt als Jobdefinitioune) besteet allgemeng aus de folgenden:

    1. Beschreiwung vum Prozess.
    2. Runlevels wou de Prozess soll lafen oder Eventer déi en ausléise sollen.
    3. Runlevels wou de Prozess soll gestoppt ginn oder Eventer déi et solle stoppen.
    4. Optiounen.
    5. Kommando fir de Prozess ze starten.

    Zum Beispill,

    # 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
    

    Fir Ännerungen z'applizéieren, musst Dir den Upstart soen fir seng Konfiguratioun nei ze lueden.

    # initctl reload-configuration
    

    Da fänkt Är Aarbecht un andeems Dir de folgende Kommando tippt.

    $ sudo start yourjobname
    

    Wou yourjobname den Numm vun der Aarbecht ass, déi virdru mam yourjobname.conf Skript dobäigesat gouf.

    E méi kompletten an detailléierte Referenzguide fir Upstart ass verfügbar op der Websäit vum Projet ënner dem Menü Kachbuch.

    Resumé

    E Wëssen iwwer de Linux Bootprozess ass néideg fir Iech mat Probleemer ze hëllefen Aufgaben wéi och mat der Adaptatioun vun der Leeschtung vum Computer a lafend Servicer op Är Bedierfnesser.

    An dësem Artikel hu mir analyséiert wat geschitt aus dem Moment wou Dir den Power Schalter dréckt fir d'Maschinn unzeschalten, bis Dir e komplett operationell User-Interface kritt. Ech hoffen Dir hutt geléiert et sou vill ze liesen wéi ech et gemaach hunn wärend Dir et zesummegesat huet. Fillt Iech gratis Är Kommentaren oder Froen hei drënner ze hannerloossen. Mir freeën eis ëmmer vun eise Lieser ze héieren!