8.5. Init skripty

Skripty v adresáři /etc/init.d se dělí do dvou kategorií:

Skripty, které program init volá přímo

to je případ startu a korektního zastavení systému (např. klávesovou kombinací Ctrl-Alt-Return) Vykonání těchto skriptů je definováno v /etc/inittab.

Skripty, které program init volá nepřímo

to se stane při změně úrovní běhu. Spustí se skript /etc/init.d/rc volající správné skripty ve správném pořadí.

Skripty pro změnu úrovně běhu se rovněž nalézají v adresáři /etc/init.d, ale volají se pomocí symbolických odkazů z jednoho z adresářů počínaje /etc/init.d/rc0.d až po /etc/init.d/rc6.d. To je velmi názorné a zabraňuje to duplicitě skriptů, použitých pro více úrovní běhu.

Každý z těchto skriptů se dá volat jako start-skript i stop-skript, rozlišují proto parametry start a stop.

Navíc rozlišují skripty parametry restart, reload, force-reload a status. Význam všech voleb je v následující tabulce.

Tabulka 8.2. Přehled voleb init skriptů

Volba

Význam

start

Spustit službu.

stop

Ukončit službu.

restart

Pokud služba běží, ukončit ji a znovu spustit, pokud neběží, pouze spustit.

reload

Znovu načíst konfiguraci služby, aniž by se zastavovala a spouštěla.

force-reload

Totéž jako reload, pokud to služba podporuje, jinak jako restart.

status

Zobrazit aktuální status.

Příklad:

Při opuštění úrovně běhu 3 je skript /etc/init.d/rc3.d/K40network jedním ze spuštěných skriptů. Program /etc/init.d/rc volá skript /etc/init.d/network s parametrem stop. Při vstupu do úrovně běhu 5 se spustí tentýž skript, ale s parametrem start.

Odkazy v podadresářích pro jednotlivé úrovně běhu slouží pouze k tomu, aby umožnily přiřadit skripty úrovním běhu.

Vytvoření a odstranění potřebných odkazů provádí program insserv při instalaci a deinstalaci balíků. Podrobnosti najdete v manuálové stránce tohoto programu.

V dalším odstavci najdete krátký popis startovacího a ukončovacího skriptu spolu s řídicím skriptem:

boot

Spouští se při startu systému přímo z programu init. Je nezávislý na požadované výsledné úrovni běhu a provádí se pouze jednou. Spustí se démon jádra, který zajistí zavedení modulů jádra. Zkontrolují se souborové systémy, zruší se některé nadbytečné soubory v adresáři /var/lock a síť se nakonfiguruje pro loopback device (pokud je to nastaveno v souboru /etc/rc.config). Dále se nastaví systémový a PnP hardware pomocí nástroje isapnp.

Pokud se stane chyba při automatické opravě souborového systému, má systémový administrátor možnost po zadání hesla zadat další informace přispívající k jejímu odstranění.

Dále se vykonají všechny skripty v adresáři /etc/init.d/boot.d začínající písmenem S. Je to proto vhodné místo pro vaše rozšíření o ty kroky, které by měl systém dělat pouze při startu.

Nakonec se spustí skript boot.local.

boot.local

Zde můžete přidat další příkazy, které se mají provést při startu, než se začne zvyšovat úroveň běhu. Funkční obdobou v dosových systémech je soubor AUTOEXEC.BAT.

boot.setup

Všeobecná nastavení při přechodu z jednouživatelského režimu single user mode na libovolnou vyšší úroveň běhu, například rozložení kláves a konfigurace konzole.

halt

Tento skript se spouští při přechodech na úrovně běhu 0 nebo 6. Proto se může zavolat jak pod jménem halt, tak i reboot, a podle předaného jména se systém znovu nastartuje nebo ukončí.

rc

Řídící skript pro změnu úrovně běhu. Spouští nejprve stop skripty současné úrovně a po nich start skripty nové úrovně.

Do této kostry můžete vhodně zasadit své vlastní skripty. Šablonu na to najdete v souboru /etc/init.d/skeleton. Pro konfiguraci spuštění vlastního skriptu v souboru /etc/rc.config zde vytvořte proměnnou START_služba. Dodatečné parametry lze uvést v případě potřeby také do souboru /etc/rc.config (viz např. skript /etc/init.d/gpm).

[Warning]Varování

Při vytvoření vlastních skriptů zachovejte opatrnost. Chybný skript může způsobit nefunkčnost systému.

8.5.1. Vkládání skriptů

V Linuxu není problém vytvářet vlastní skripty a poměrně jednoduše je integrovat do stávajícího prostředí. Informace o způsobu pojmenování, formátu a organizaci vlastních skriptů najdete ve specifikaci LSB a manuálových stránkách init, init.d a insserv. Zajímavé informace najdete také v manuálových stránkách startproc a killproc.

[Warning]Vytváření vlastních init skriptů

Chyby v init skriptech mohou vést k zamrznutí počítače. Věnujte prosím editaci těchto skriptů maximální pozornost a pokud je to možné, otestujte je. Užitečné informace o init skriptech najdete v části 8.3 – „Úrovně běhu“.

  • Jako šablonu pro svůj nový init skript použijte soubor /etc/init.d/skeleton. Kopii tohoto souboru uložte pod novým jménem a editujte důležité položky jako program, jména souborů, cesty a další detaily. Šablonu samozřejmě můžete rozšířit o vlastní části.

  • Blok INIT INFO je povinnou částí skriptu a měly by v něm být provedeny příslušné změny:

    ### BEGIN INIT INFO
    # Provides:          FOO
    # Required-Start:    $syslog $remote_fs
    # Required-Stop:     $syslog $remote_fs
    # Default-Start:     3 5
    # Default-Stop:      0 1 2 6
    # Description:       Start FOO to allow XY and provide YZ
    ### END INIT INFO
        

    Na první řádce bloku INFO po řádce Provides:, uveďte jméno služby nebo programu kontrolovaného nově vytvářeným skriptem. V řádkách Required-Start: a Required-Stop: uveďte všechny služby, které je nutné spustit a zastavit před startem nebo spuštěním vaší nové služby.

    Tyto informace budou později použity při generování jména a čísla skriptu v adresářích úrovní běhu. V Default-Start a Default-Stop uveďte úrovně běhu, kdy se služba má automaticky spustit nebo ukončit. Na konec do řádky Description napište krátký popis služby.

  • Odkazy z /etc/init.d/ do příslušného adresáře úrovně běhu (/etc/init.d/rc?.d/), vytvoříte zadáním příkazu insserv jmeno_skriptu. Program insserv používá hlavičku INIT INFO pro vytváření důležitých odkazů potřebných pro spuštění a zastavení skriptu v adresářích úrovní běhu (/etc/init.d/rc?.d/). Program se také stará o správné pořadí spuštění a zastavení v určených úrovních běhu. Pokud byste raději používali grafický nástroj, můžete použít editor úrovní běhu v programu YaST, popsaný v sekci 8.6 – „Editor úrovní běhu“.

Pokud již skript v adresáři /etc/init.d/ existuje, můžete ho do existujícího schématu úrovní běhu jednoduše integrovat pomocí programu insserv nebo povolením příslušné služby v programu YaST. Vámi provedené změny se projeví při následujícím restartu počítače, během kterého dojde k automatickému spuštění nové služby.