Zapínání a vypínání systému Unix

Oto Válek
http://www.volny.cz/oto.valek/unx

Program init /sbin/init level

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 Linuxu2 – 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

Konfigurační soubor inittab /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 120

Startovací 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í