Navigationsleiste  |    Direktzugriff   |    Kurs  |     Home  

Linux-Kurs: Init und Runlevels


Systemstart durch Init-V

Direkt nach dem Kernel-Start wird unter Unix das Programm /sbin/init gestartet. Du siehst ihn als ersten Eintrag wenn du ps afx aufrufst. Du kannst dem Init-Prozess schon beim lilo/grub-Start Parameter übergeben, dazu später mehr.
Danach führt Init eine Reihe von Skripten aus, diese starten dann diverse Dienste oder konfigurieren deinen Rechner. Das richtig Interessante sind aber die Runlevels. Mit diesen Runlevels kannst du deinen Rechner in verschiedenen Konfigurationen hochfahren, zum Beispiel mit oder ohne Netzwerk.

Die Runlevels werden mit Nummer belegt, leider hat fast jede Distri eine andere Vorstellung davon. Aber es besteht Hoffnung, und zwar durch die Linux Standart Base, damit versuchen die meisten Distributoren eine einheitlich Basis für Linux zu schaffen.
Also, laut LSB sind die Runlevels so definiert:

0     System anhalten
1 Single User Mode: Nur ein Benutzer kann arbeiten, meistens root. Es sollten nur die wichtigsten Dienste gestartet sein
2 Mulituser, no network: Es können mehrere Benutzer arbeiten, ohne Netzwerk-Exports (NFS) (multiuser with no network services exported)
3 Normal, Multiuser: Normaler Modus
4 Reserviert: normale Benutzung, Multiuser
5 Multiuser mit X-Anmeldung: Es erscheint der X-Server zur Benutzer-Anmeldung
6 Reboot: Rechner wird neugestartet


Deinen aktuellen Runlevel erfährst du als root mit dem Befehl runlevel:

root # runlevel           #Der aktuelle Runlevel

 

Wenn du eine von diesen Nummern beim Start des lilo übergibst wird dieser Runlevel gestartet, zum Beispiel:
lilo: linux 1

oder
lilo: linux single
startet Linux im Runlevel 1 = single Modus. Kann es große Hilfe sein, wenn dein Netzwerk klemmt ...

/etc/inittab

Das ist die zentrale Konfigurationsdatei des Init-Prozeßesses, in dieser Datei steht auch drin welcher Runlevel was bei deiner Distri macht. Ein weiterer interessanter Punkt ist "ca::ctrlaltdel:/sbin/shutdown -t3 -r now" hiermit wird festgelegt was passiert wenn du auf die Tasten "Strg-Alt-Entf" (der Affengriff) drückst; hier wird ein schneller Neustart ausgeführt.
Der Rest in der Datei ist was für Fortgeschritte, daran rumzuspielen kann schwere Folgen haben !!


Startskripte

Die Startskripte dienen dazu die einzelnen Dienste zu starten oder zu beenden, sie sind (meist) bash-Programme.
So, damit der init nun weiß was tun soll, gibt verschiedene Verzeichnisse und zwar eines für jeden Runlevel. Diese Verzeichnisse stehen entweder direkt in /etc/ (Debian) oder unter /etc/rc.d/(Mandrake, RedHat) oder unter /sbin/init.d (SuSE) und heißen rc0.d, rc1.d, rc2.d ... entsprechend dem Runlevel.

Ein solches Verzeichnis sieht in etwa so aus:


K15numlock
K20bootparamd
K20nfslock
K20rstatd
K20rusersd
.....
S09sound
S10network
S10usb
S20random
S30syslog
 

Dabei gilt nun folgendes:


Anlegen eines eigenen Start-Skript

Normalerweile sollte es eine Datei namens "skeleton" im Skript-Verzeichnis geben, diese kannst du dein Skript nehmen, wenn es nicht existiert, einfach ein anderes Skript kopieren und dann bearbeiten
Unser Skript sollte folgendes machen: Wenn der Runlevel 2 erreicht ist, soll es 3mal piepen, und wird der Runlevel verlassen 1mal piepen.
Damit sieht unser Skript "piep" nun so aus (keine Angst wenn du es nicht verstehst, die bash-Syntax hatten wir im Kurs noch nicht, aber allzu schwer ist es nicht) :

#!/bin/bash

# Mit Parameter start piept der Rechner 3mal
# bei stop 1mal piepen

case "$1" in    #$1 ist der erste Parameter von piep
  
  start)        #wenn der erste Parameter start ist, also: piep start
  
        #dreimal piepen
        echo "Runlevel 2 erreicht "

        echo -n -e \\a   #piepen
        sleep 1          # eine Sekunde warten (schlafen)
        echo -n -e \\a   #piepen
        sleep 1          # eine Sekunde warten (schlafen)
        echo -n -e \\a   #piepen
        sleep 1          # eine Sekunde warten (schlafen)
        ;;
  
  stop)         #wenn der erste Parameter stop ist, also: piep stop
        
        #einmal piepen
        echo "Runlevel 2 beendet "

        echo -n -e \\a   #piepen
         ;;

  *)            #Anzeige bei allen anderen oder gar keinen Parametern
        echo "Usage: piep {start|stop}"
        exit 1
        ;;
esac

exit 0          #return Status fuer folgendes Programm


So dieses Skript nun in das Verzeichnis rc2.d als S99piep und als K99piep linken, und das war es schon :-)

Den Runlevel kannst du übrigens wechseln in dem es dem init sagst: init 2 und es geht ab in Runlevel 2.



Prozesse   
Inhalt   
Bash-Skripte

Erstellt: 2001-05-06 Autor: Markus Ungermann (markus@tuxhausen.de)
Letztes Update: 2007-10-06      URL: http://www.tuxhausen.de/kurs_init.html