13. OS Linux: inicializace systému po zavedení, proces init, inittab, úrovně běhu, inicializace služeb, rc-skripty
13. OS Linux: inicializace systému po zavedení, proces init, inittab, úrovně běhu, inicializace služeb, rc-skripty
Zavádění a start systému
Zavádění systému - doba "předunixová"
Inicializace technického vybavení kódem z pevné paměti.
Autodiagnostika a načtení zavaděče z vnější paměti (disk, cdrom, síť)
Zavaděč načte jádro systému ( někdy nejprve načte sekundární zavaděč, který potom načítá jádro).
Jádro systému se inicializuje, připojí kořenový systém souborů a spustí proces init.
Vše je závislé na technickém vybavení a je proto pro každou platformu jiné!
Start systému - doba "unixová"
Proces init načte tabulku /etc/inittab a podle ní dokončí inicializaci systému
voláním tzv. rc-skriptů.
Úrovně běhu systému (Run Levels)
Charakteristické pro systémy typu SVR4.
V každém okamžiku se systém nachází v nějaké úrovni, která určuje funkčnost systému.
Administrátor může vyžádat přechod do nové úrovně
Aktuální a předchozí úroveň lze zobrazit příkazem who -r
Předdefinované úrovně:
0 vypnutý systém. Přechodem do úrovně 0 se systém vypíná (zastavují se procesy, odmontovávají se systémy souborů).
s,S,1 jednouživatelský režim. Je zakázáno přihlašování uživatelů. Přihlásit se lze pouze ze systémové konzole. Slouží pro údržbu systému případně jako přechodový při startu systému.
2,3,4 víceuživatelské režimy. Úroveň 3 je obvyklá pracovní úroveň.
6 restart systému. Dochází k vypnutí do úrovně 0 a novému zavedení systému.
Tabulka inittab
Konfigurační soubor procesu init.
Při její změně je třeba systém restartovat nebo upozornit init signálem HUP:
kill -1 1
Formát:
Textový soubor, kde každá řádka má strukturu:
návěští:úroveň:typ_akce:příkaz
kde:
návěští krátké (max. 4 znaky) návěští řádky
úroveň 1 nebo více znaků určuje úroveň, pro kterou řádka platí (výjimku
tvoří řádek s typem akce initdefault).
typ_akce klíčové slovo určující typ akce provedené pro daný řádek:
Typy akcí:
Určují způsob interpretace řádky.
Při startu se nejprve provedou řádky označené:
sysinit, boot akce provedené "na popředí" pouze při startu systému. Před zahájením další akce se čeká na její dokončení.
Pak se vyhledá řádka:
initdefault řádek s touto akcí neobsahuje položku příkaz. Položka úroveň určuje implicitní úroveň, do které systém přejde po startu.
Ostatní akce se uplatní tehdy, je-li v položce úroveň obsažena úroveň, do které systém přechází. Položka příkaz určuje prováděný příkaz. Řádky se provádějí v pořadí jak jsou uvedeny v inittab. Způsob provádění určuje klíčové slovo:
wait Příkaz prováděný "na popředí". Před zahájením další akce se čeká na jeho dokončení.
respawn Příkaz prováděný "na pozadí". Ihned se pokračuje v provádění dalších akcí. Pokud tento příkaz skončí, je spuštěna znovu.
off Příkaz není spuštěn. Pokud běží, je ukončen.
once Příkaz je spuštěn při prvním přechodu do uvedené úrovně.
powerfail Příkaz je spuštěn při výpadku napájení.
Přechody mezi úrovněmi běhu
shutdown -i nová_úroveň -g prodleva -y
Většinou skript
Zablokuje přihlašování uživatelů a přihlášeným uživatelům vyšle varovnou zprávu.
Počká prodleva vteřin.
Není-li uveden parametr -y, vyžádá si potvrzení.
Vyvolá příkaz init nová_úroveň.
init nová_roveň
Provede řádky tabulky inittab mající v položce úroveň uvedenu požadovanou
úroveň.
reboot, halt
Zastaví všechny procesy, odpojí systémy souborů ale neprovádí příkazy podle
inittab. Vhodné pouze z jednouživatelského režimu.
Příkaz reboot navíc opětovně spustí systém.
Startovací skripty
Umístěny v adresáři /etc/init.d resp. /sbin/init.d
Zavoláním s parametrem start příslušnou komponentu odstartují,
zavoláním s parametrem stop ji zastaví.
Příklad:
#!/sbin/sh
#
# Copyright (c) 1997 by Sun Microsystems, Inc.
# All rights reserved.
#ident "@(#)lp 1.9 97/12/08 SMI"
case "$1" in
'start')
[ -f /usr/lib/lpsched ] && /usr/lib/lpsched ;;
'stop')
[ -f /usr/lib/lpshut ] && /usr/lib/lpshut ;;
*) echo "Usage: $0 { start | stop }"
exit 1
esac
exit 0
Určení pořadí startovacích skriptů při přechodu mezi úrovněmi
Startovací skripty jsou volány tzv. rc-skripty volanými z inittab.
Pořadí a parametry jsou dány pojmenováním odkazů na skripty z adresářů /etc/rcn.d resp. /sbin/rcn.d
Pořadí je dáno abecedním uspořádáním odkazů.
Parametr volání je dán jménem skriptu. Skripty začínající na velké S jsou volány s parametrem start, skripty začínající na velké K s parametrem stop.
Odkazy na startovací skripty do adresáře init.d mohou být symbolické nebo pevné linky.
Jména mají obvykle strukturu: Xnnjmeno
kde:
X je S nebo K
nn je dvou (nebo tří) ciferné číslo
jméno je jméno v adresáři init.d