GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist die Verbindung zwischen den Verzeichnissen /etc/init.d und /etc/rcX.d in Linux?

Vergessen wir init.d oder rcx.d und halte die Dinge sehr einfach. Stellen Sie sich vor, Sie programmieren ein Programm, dessen einzige Aufgabe es ist, andere Skripte nacheinander auszuführen oder zu beenden.

Ihr nächstes Problem besteht jedoch darin, sicherzustellen, dass sie in der richtigen Reihenfolge ausgeführt werden. Wie würden Sie das ausführen?

Und stellen wir uns vor, dieses Programm hat in scripts geschaut Ordner zum Ausführen der Skripte. Um die Priorität von Skripten zu ordnen, würden Sie sie in einer, sagen wir, numerischen Reihenfolge benennen. Diese Reihenfolge bestimmt die Beziehung zwischen init.d und rc

Mit anderen Worten init.d enthält die auszuführenden Skripte und den rcX.d enthält ihre Ausführungsreihenfolge.

Die X Wert in rcX.d ist der Runlevel. Dies könnte lose in den aktuellen Zustand des Betriebssystems übersetzt werden.

Wenn Sie in rcX.d graben Skripten finden Sie diese Formatierung:

Xxxabcd
  • X wird durch K ersetzt oder S , was dafür steht, ob das Skript killed sein soll oder started im aktuellen Runlevel
  • xx ist die Bestellnummer
  • abcd ist der Name des Skripts (der Name ist irrelevant, aber wohin er zeigt, ist das Skript, das ausgeführt wird)

Es gibt mehrere verschiedene Init-Systeme für Linux. Die wichtigsten sind SysVinit (das traditionelle), Upstart (Ersatz von Ubuntu) und SystemD (gepusht von Fedora und Gnome). Die Verzeichnisse /etc/init.d und /etc/rc?.d werden von SysVinit verwendet. Das Buch erwähnt sie möglicherweise in Bezug auf Ubuntu, weil die Informationen etwas veraltet sind (Ubuntu verwendete früher SysVinit wie alle anderen) oder weil diese Verzeichnisse aus Kompatibilitätsgründen immer noch existieren.

/etc/init.d enthält eine Reihe von Skripten, die jeweils Anweisungen zum Starten und Stoppen eines Dienstes enthalten. Einige dieser Dienste müssen beim Booten gestartet werden; andere müssen im Mehrbenutzermodus gestartet werden, aber nicht im Einzelbenutzer-Wartungsmodus; und es ist möglich, verschiedene Modi mit verschiedenen Sätzen gewünschter Dienste zu definieren. SysVinit verwaltet dies über Runlevels. Das Verzeichnis /etc/rc$N.d enthalten die Skripte, die beim Aufrufen von Runlevel N ausgeführt werden sollen (/etc/rc$N.d/S* ) und die Skripte, die beim Verlassen von Runlevel N ausgeführt werden sollen (/etc/rc$N.d/K* ). Da viele Runlevel gemeinsame Skripte haben, werden die Skripte alle an einem einzigen Ort /etc/init.d gespeichert, anstatt eine Kopie der Skripte für jeden Runlevel zu speichern , und die Runlevel-spezifischen Verzeichnisse /etc/rc?.d symbolische Links enthalten. Außerdem geben die Namen der symbolischen Links an, ob der Dienst gestartet werden soll (S* ) oder gestoppt (getötet, K* ) in diesem Runlevel, und ein numerisches Präfix wird verwendet, um die Reihenfolge zu steuern, in der die Skripts ausgeführt werden.

Das Skript, das für das Durchlaufen von /etc/rc$N.d verantwortlich ist ist /etc/init.d/rc (auf Pre-Upstart Ubuntu und auf Debian; Speicherorte können auf anderen Linux-Distributionen variieren).


/etc/init.d ist das Verzeichnis, in das die Init-Skripte gehören.

Der etc/rcX.d Hier steuern Links, welche Dienste beendet oder gestartet werden, wenn Runlevel X aufgerufen wird . Dateien in rcX.d beginnend mit K werden mit dem Parameter stop ausgeführt , und Dateien, die mit S beginnen werden mit dem Parameter start ausgeführt . Es ist üblich, Start- und Stoppreihenfolge mit einer zweistelligen Zahl nach dem K zu sequenzieren oder S . Um eine korrekte Start- und Stoppreihenfolge zu gewährleisten, addieren sich die beiden Sequenzen normalerweise zu 100.

Programme können in einem Runlevel deaktiviert werden, indem die Links entfernt oder die Groß-/Kleinschreibung des K geändert wird oder S zu k oder s .

BEARBEITEN:Administratoren führen normalerweise die Skripte von /etc/init.d aus Dies kann je nach Distribution ein symbolischer Link zu einem anderen Verzeichnis sein. (Unterschiedliche Distributionen haben unterschiedliche Standards.)

Der rcX.d werden vom Initialisierungscode verwendet, um die Ausführungsebenen zu ändern.


Linux
  1. Wie behandelt Linux mehrere aufeinanderfolgende Pfadtrennzeichen (/home////username///file)?

  2. Der Unterschied zwischen ~/.profile, ~/.bashrc, ~/.bash_profile, ~/.gnomerc, /etc/bash_bashrc, /etc/screenrc …?

  3. Linux – Zusammenführen von /usr/bin und /usr/sbin in /bin (gnu/linux)?

  4. CentOS / RHEL:So stellen Sie eine gelöschte /etc/passwd-Datei wieder her

  5. LANG=C ist in einer Reihe von /etc/init.d/*-Skripten enthalten. Was macht LANG=C und warum müssen Sie LANG=C setzen.

Der richtige Weg zum Bearbeiten von /etc/passwd- und /etc/group-Dateien unter Linux

Die Dateien /proc/mounts, /etc/mtab und /proc/partitions verstehen

Wann sollte ich /dev/shm/ verwenden und wann sollte ich /tmp/?

Unterschied zwischen /etc/crontab und crontab -e

Was ist der Unterschied zwischen /tmp und /run?

Warum haben die Verzeichnisse /home, /usr, /var usw. alle dieselbe Inode-Nummer (2)?