Runlevel

Aus Mikiwiki
Version vom 30. Januar 2015, 15:45 Uhr von Michi (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Als Runlevel werden die abgestuften Systemzustände bezeichnet, welche viele Betriebssysteme von Rechnern beim Bootvorgang durchlaufen. Jedem Runlevel sind bestimmte Systemdienste zugeordnet, die beim Bootvorgang als Prozesse in bestimmter Reihenfolge innerhalb des Betriebssystems gestartet werden. So werden Systemressourcen des Rechners stufenweise in Betrieb genommen. Bei Beendigung des Betriebssystems (Shutdown) werden die Runlevel in umgekehrter Reihenfolge durchlaufen, die laufenden Prozesse werden stufenweise beendet, bis der Rechner ausgeschaltet werden kann. Daneben kann auch direkter Wechsel von einem Runlevel in einen anderen erfolgen.

Runlevel sind hauptsächlich aus den unterschiedlichen Unix-Systemen wie Linux oder Solaris bekannt. Im Gegensatz zu den eher an Unix System V orientierten Systemen kennen die von BSD abgeleiteten nur zwei Runlevel: single-user und multi-user. Doch auch in Windows entsprechen die Startoptionen "Abgesicherter Modus", "Abgesicherter Modus mit Netzwerk" oder "Windows normal Starten im Windows-Bootmenü" jeweils genau einem Runlevel.

Die Idee der unterschiedlichen Runlevel ist es, abgestufte Sicherheitsstufen bereitzustellen, in denen nur bestimmte Systemprozesse aktiv sind. Dies ist wichtig, wenn etwa ein System von Computerviren befallen ist und ohne Netzwerk-Anbindung laufen soll.

Konfiguration

Die Konfiguration der Runlevel findet sich üblicherweise in der Datei "/etc/inittab".

Anzeige des aktuellen Runlevel.

# runlevel
N 5
# who -r
         Runlevel 5   2015-01-30 08:22                   last=S

Bedeutung

Der Linux Standard Base / LSB legt die Bedeutung der Runlevel fest.

  • Runlevel 0 dient dem Anhalten des Systems
  • Runlevel 1, der Single User Mode, dient der Systemwartung: Hier kann sich nur der Benutezr "root" an einer einzigen Konsole anmelden und es laufen keine Dienste im Hintergrund.
  • Runlevel 2 erlaubt nur einen sehr eingeschränkten Netzwerkbetrieb - kein (x)inetd, kein NFS- und SMB-Client oder -Server.
  • Die Runlevel 3 und 5 stehen bei den meisten Distributionen für "normalen" Betrieb mit Text- bzw. grafischem Login.
  • Runlevel 4 wird nicht verwendet.
  • Runlevel 6 dient dem Neustart des Systems
Runlevel Linux Standard Base / LSB Debian Mandrake Red Hat SUSE Linux
0 Halt Halt Halt Halt Halt
Single User Mode Single User Mode Single User Mode Single User Mode Single User Mode
2 Multiuser ohne exportierte Netzwerkdienste Multiuser Multiuser ohne Netzlaufwerke und Netzwerk-Server Multiuser ohne Netzlaufwerke und Netzwerk-Server Multiuser ohne Netzlaufwerke und Netzwerk-Server
3 normaler/voller Multiuser-Betrieb Multiuser Multiuser mit vollem Netzwerk Multiuser mit vollem Netzwerk Multiuser mit vollem Netzwerk
4 reserviert; Standard: wie 3 Multiuser wie Runlevel 3 wie Runlevel 3 --
5 Multiuser mit xdm oder entsprechendem Display Manager Multiuser Multiuser mit vollem Netzwerk und grafischem Login Multiuser mit vollem Netzwerk und grafischem Login Multiuser mit vollem Netzwerk und grafischem Login
6 Reboot Reboot Reboot Reboot Reboot

Ein Runlevelskript kümmert sich darum, dass vor dem Start eines bestimmten Dienstes alle Bedingungen erfüllt sind, z. B. wird zuerst überprüft ob das Programm überhaupt installiert ist oder ob bestimmte Konfigurations- und Protokolldateien vorhanden sind.

Als Vorlage eines Runlevelskripts kann ein beliebiges anderes Skript aus dem Verzeichnis "/etc/init.d" dienen.

Der Befehl "/sbin/runlevel" gibt Auskunft über den aktuellen und den vorangegangenen Runlevel. "N" steht dabei für "kein vorheriger Runlevel".

Beim Bootvorgang fährt das Betriebssystem automatisch in einen dieser Runlevel:

  • 5 oder 3 im Normalbetrieb.
  • 1, wenn ein schwerer Fehler aufgetreten ist.

Der Eintrag "initdefault" in der Datei "/etc/inittab" (die Konfigurationsdatei von "/sbin/init") bestimmt, in welchem Runlevel das Betriebssystem bootet. Beispielsweise steht die folgende Zeile für ein System mit Text-Login:

id:3:initdefault

Für jeden Runlevel gibt es ein eigenes Verzeichnis ("/etc/init.d/rcn.d" bzw. "/etc/rc.d/rcn.d", je nach Distribution), das Links auf die Init-Dateien im Verzeichnis "/etc/init.d" enthält. Ob ein Init-Skript in ein Runlevel-Verzeichnis verlinkt ist, bestimmt darüber, ob dieses Skript in diesem Runlevel ausgeführt wird, und damit, ob der durch das Skript gestartete Dienst in diesem Runlevel verfügbar ist oder nicht.

In den "rcn.d"-Verzeichnissen finden sich zwei Arten von Links:

  • Start-Skripte ("Snn...), die beim Wechsel in den jeweiligen Runlevel ausgeführt werden.
  • Stop-Skripte ("Knn...), die beim Verlassen des jeweiligen Runlevels ausgeführt werden.

Die zweistellige Nummer hinter dem "S" oder "K" gibt die Reihenfolge an, in der das Betriebssystem die Skripte abarbeitet - von "00" bis "99". So lassen sich Abhängigkeiten bestimmen: Netzwerkdienste wie ein Mailserver oder das Einbinden von Netzlaufwerken via SMB oder NFS funktionieren natürlich erst, wenn das Netzwerk eingerichtet ist. Entsprechend müssen die "höheren" Dienste beim Verlasen des Runlevels auch vor den Grunddiensten beendet werden.

Zuständig für das Starten der Init-Skripte ist das Skript "/etc/init.d/rc", das "/sbin/init" mit dem gewünschten Runlevel als Argument aufruft. Die Datei "/etc/inittab" enthält dazu für jeden Runlevel eine Zeile wie die folgende:

l5:5:wait:/etc/init.d/rc5

Beim Erreichen des Runlevels 5 führt "/sbin/init" das Skript "/etc/init.d/rc" mit dem Argument "5" aus und wartet ("wait"), bis es durchgelaufen ist. Das Skript "rc" wiederum startet einfach alle Startskripte im Runlevel-Verzeichnis des übergebenen Runlevels ("/etc/init.d/rcn.d" bzw. "/etc/rc.d/rcn.d") mit der Option "start". Falls das Betriebssystem nicht gerade frisch bootet, sondern bloss den Runlevel wechselt, so ruft "rc" zuvor die Stoppskripte im Runlevel-Verzeichnis des übergebenen Runlevels mit der Option "stop" auf.

Die kommerziellen Distributionen starten während des Bootvorgangs einen recht langwierigen Test auf neue Hardware. Wird nicht ständig am Rechner herumgescharubt, kann das entsprechende Init-Skript aus seinem Standard-Runlevel entfernt und bei Bedarf von Hand aufgerufen werden.

  • Mandrake: "harddrake"
  • Red Hat: "kudzu"
  • SUSE Linux: "hwscan"

FAQ

Temporäre Änderung des Runlevel

Wechsel in Runlevel 3. Beim nächsten Rechnerneustart wird wieder im Standard-Runlevel gestartet.

# init 3

Dauerhafte Änderung des Runlevel

Einstellung von Runlevel 3 als Standard-Runlevel. Beim nächsten Rechnerneustart wird also in diesen Runlevel gestartet.

# vi /etc/inittab
id:3:initdefault:

Anstatt den Rechner jetzt tatsächlich neu zu starten kann mit folgendem Befehl direkt in den Runlevel 3 gewechselt werden.

# init 3

Weblinks

Herausgeber Sprache Webseitentitel Anmerkungen
country DE.gif Wikipedia ger Runlevelwbm Enzyklopädischer Artikel