Zapínání a vypínání systému Unix
Oto Válek
http://www.volny.cz/oto.valek/unx
1) systémová služba spouštěná při startu systému – tzv. boot init
- UID 1, rodič všech procesů
- startuje jednotlivé služby v závislosti na aktuální konfiguraci run-level
2) příkaz – tzv. user init
- přepíná mezi konfiguracemi za běhu systému
- druhy run-level jsou určeny jednou číslicí nebo znakem:
0 | - halt, požadavek na vypnutí systému | |
1,S,s | - single-user, jednouživatelský režim | |
- root na systémové konzoli, pro nouzovou správu systému | ||
2,3,4 | - multi-user, víceuživatelský režim, standardní stav systému | |
- různé skupiny služeb, závislé na platformě | ||
- např. v RedHat Linuxu | 2 – bez síťových služeb | |
3 – standardní stav | ||
5 | - různé | |
6 | - reboot, požadavek na restart systému |
- skupiny služeb a startovacích skriptů jsou definovány v /etc/inittab
- boot init čte run-level z /etc/inittab
- user init přebírá run-level, do kterého má systém přejít, jako svůj jediný parametr
- kromě (0-6, s, S) lze jako parametr uvést i speciální konfigurace a, b, c
- parametr Q, q způsobí znovunačtení /etc/inittab
- textový soubor
- struktura jedné řádky id:rstate:action:process
id | - obvykle 4 znakový unikátní identifikátor položky | |
process | - příkaz pro sh | |
rstate | - seznam konfigurací, kdy je příkaz platný | |
- kromě run-levelu (0-6, s, S) i speciální konfigurace (a, b, c) | ||
- prázdná položka znamená všechny konfigurace | ||
action | - určuje způsob zpracování položky | |
- položky pro zpracování jen při startu systému (boot init), ignorují rstate | ||
initdefault | - bez procesu, jen definuje implicitní run-level v položce rstate | |
sysinit | - čeká na ukončení procesu | |
boot | - po sysinit, nečeká na ukončení | |
- pro zpracování při startu i při změně konfigurace (user init) | ||
wait | - čeká na ukončení procesu | |
- typicky pro spouštění tzv. startovacích skriptů | ||
once | - spustí proces, pokud už neběží | |
- nečeká na ukončení procesu | ||
respawn | - spuštěný proces dále monitoruje, a restartuje ho, pokud se ukončí | |
- typicky pro spouštění jednotlivých konzolí | ||
off | - ukončí proces při přechodu do daného run-levelu | |
- pro ošetření speciálních událostí | ||
powerfail | - procesy se provedou poté, co UPS signalizuje výpadek napájení (pošle signál SIGPWR initu) | |
- obvykle po několika minutách odhlásí uživatele a vypne systém | ||
ctrlaltdel | - ošetří stisk kláves Ctrl-Alt-Del (Linux na PC) | |
- vyvolá zde restart systému |
- příklad obsahu souboru:
# Level to run in id:3:initdefault: # System initialization si::sysinit:/sbin/rc.d/rc.sysinit # RC scripts si2:2:wait:/sbin/rc 2 si3:3:wait:/sbin/rc 3 si4:4:wait:/sbin/rc 4 # System console cons:123456:respawn:/usr/sbin/getty console console # Terminals ttp1:234:respawn:/usr/sbin/getty -h tty0p1 H ttp2:234:respawn:/usr/sbin/getty -h tty0p2 H ttp3:234:respawn:/usr/sbin/getty -h tty0p3 H ttp4:234:respawn:/usr/sbin/getty -h tty0p4 H # Powerfail pf::powerfail:/sbin/shutdown -i 0 -g 120Startovací skripty
- umístěny v určitém adresáři závislém na platformě
/sbin/init.d (HP) /etc/init.d (Sun) /etc/rc.d/init.d (RedHat Linux)
- odstiňují různé způsoby startování služeb
- standardní volání
jméno_služby start
jméno_služby stop
- lze tak spouštět/zastavovat služby za běhu systému
- při startu systému se tímto způsobem spouští služby pomocí tzv. RC-skriptů
$ ls –l /sbin/init.d -r-xr-xr-x bin bin 1282 Jun 10 1996 cron -r-xr-xr-x bin bin 10644 Jun 10 1996 hparray -r-xr-xr-x bin bin 1344 Jun 7 1996 inetd -r-xr-xr-x bin bin 1569 May 30 1996 httpd -r-xr-xr-x bin bin 1604 May 30 1996 lp -r-xr-xr-x bin bin 1538 Jun 10 1996 sendmail -r-xr-xr-x bin bin 2720 Jun 10 1996 syslogd ...RC-skripty
- spouštěny z /etc/inittab parametrem wait
- run-level je buď součástí jejich názvu ( /etc/rc3 ),
nebo se předává jako parametr (/etc/rc 3), závislé na systému
- přečtou obsah adresáře odpovídajícího nastavenému run-levelu a provedou soubory v něm uložené, symbolické nebo pevné linky, v abecedním pořadí
- znak "S" na začátku jména znamená spuštění služby
- znak "K" na začátku jména znamená zastavení služby
- číslo určuje abecední pořadí a tedy i pořadí spouštění služeb
po přečtení S730cron se spustí /sbin/init.d/cron start
- příklad adresáře pro run-level 2 :
$ ls -l /sbin/rc2.d lrwxr-xr-x root 23 Jun 10 1996 K100dtlogin.rc -> /sbin/init.d/dtlogin.rc lrwxr-xr-x root 23 Jun 10 1996 K900nfs.server -> /sbin/init.d/nfs.server lrwxr-xr-x root 20 Jun 10 1996 S220syslogd -> /sbin/init.d/syslogd lrwxr-xr-x root 18 Jun 10 1996 S500inetd -> /sbin/init.d/inetd lrwxr-xr-x root 21 Jun 10 1996 S510sendmail -> /sbin/init.d/sendmail lrwxr-xr-x root 22 Jun 10 1996 S515httpd -> /sbin/init.d/httpd lrwxr-xr-x root 20 Jun 10 1996 S710hparray -> /sbin/init.d/hparray lrwxr-xr-x root 15 Jun 10 1996 S720lp -> /sbin/init.d/lp lrwxr-xr-x root 17 Jun 10 1996 S730cron -> /sbin/init.d/cron ...Program shutdown /sbin/shutdown –i level –g timeout -y
- přepíná mezi run-levely za běhu systému
- kromě volání init navíc vyšle uživatelům varovná hlášení, a umožnuje nastavit timeout
- shutdown bez parametrů přepne do režimu S (single-user)
- s přepínačem -y nevyžaduje potvrzení