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

Verständnis der rc-Skripte in Linux

Das rc-Skript

Wenn init in einen Runlevel eintritt, ruft es das rc-Skript mit einem numerischen Argument auf, das den Runlevel angibt, zu dem gewechselt werden soll. rc startet und stoppt dann nach Bedarf Dienste auf dem System, um das System auf diesen Runlevel zu bringen. Obwohl das rc-Skript normalerweise beim Booten aufgerufen wird, kann es von init aufgerufen werden, um die Runlevel zu ändern. Beispielsweise kann Folgendes verwendet werden, um das System auf Runlevel 3 zu ändern:

# init 3

Beim Wechsel auf Runlevel 3 bringt rc das System in den neuen Runlevel, indem es alle Dienste stoppt, die nicht in Runlevel 3 laufen sollen, und alle Dienste startet, die in Runlevel 3 laufen, die noch nicht laufen.

Sie finden alle Systeminitialisierungsskripte in /etc/rc.d. Dieses Unterverzeichnis hat weitere Unterverzeichnisse, eines für jeden Runlevel:rc0.d–rc6.d und init.d . Innerhalb der /etc/rc.d/rc#.d-Unterverzeichnisse (wo das # durch eine einstellige Zahl ersetzt wird) befinden sich symbolische Links zu den Master-Skripten, die in /etc/rc.d/init.d gespeichert sind.

# ls -lrt /etc/rc.d
total 60
-rwxr-xr-x  1 root root   889 Jan 29  2015 rc.local
-rwxr-xr-x  1 root root 20199 Oct  4  2017 rc.sysinit
-rwxr-xr-x  1 root root  2617 Oct  4  2017 rc
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 init.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc1.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc0.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:49 rc6.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc4.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc3.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc2.d
drwxr-xr-x. 2 root root  4096 Mar 20 16:54 rc5.d

Die Skripte in init.d nehmen ein Argument von start oder stop und gelegentlich von reload oder restart.

Runlevel-Implementierung

Runlevel werden als Verzeichnisse auf dem System implementiert, die Shell-Skripte zum Starten und Stoppen bestimmter Daemons enthalten, z. /etc/rc1.d/. Die meisten Systeme haben Verzeichnisse für die Runlevel 0-6.

Die Skripte in jedem Verzeichnis werden entweder mit einem großen S benannt , oder ein großes K , gefolgt von einer zweistelligen Zahl, gefolgt vom Namen des Dienstes, auf den verwiesen wird. Die Dateien, die mit einem großen S beginnen, stellen Skripte dar, die beim Eintritt in diesen Runlevel gestartet werden, während Dateien, die mit einem großen K beginnen, Skripte darstellen, die gestoppt werden. Die Zahlen geben die Reihenfolge an, in der die Skripte ausgeführt werden sollen.

Beispielsweise könnte ein Daemon ein Skript namens S35daemon in rc3.d/ und ein Skript namens K65daemon haben, um ihn in rc2.d/ zu stoppen. Wenn die Nummern am Anfang des Dateinamens stehen, werden sie in der gewünschten Reihenfolge sortiert und verarbeitet.

/etc/rc

Wenn das Programm /etc/rc von init aufgerufen wird, um die Runlevel zu ändern, wechselt es in das Verzeichnis für das Ziel-Runlevel und arbeitet alle K##script-Dateien ab, um derzeit laufende Dienste zu stoppen, die nicht im Ziel-Runlevel sein sollten und S##script-Dateien für Dienste, die im Ziel-Runlevel ausgeführt werden sollten, aber derzeit nicht ausgeführt werden.

Aufgrund der Art und Weise, wie das /etc/rc-Programm unter Linux funktioniert, haben die einzelnen /etc/rc#.d/-Verzeichnisse nur entweder einen S##script- oder einen K##script-Symlink für jeden Dienst. Es wird auch einen symbolischen Link für jeden Dienst in jedem der sieben /etc/rc#.d/-Verzeichnisse geben. Mit Ausnahme der S99local-Datei (Symlink zu ../rc.local), die nur in /etc/rc1.d/ bis /etc/rc5.d/ auftaucht und keinen entsprechenden Kill-Symlink hat, sollte es immer dasselbe geben Anzahl der Dateien in jedem der Runlevel-Verzeichnisse.

Reihenfolgeabhängigkeiten beim Booten

Es ist wichtig, dass die Skripts in der richtigen Reihenfolge gestartet und beendet werden. Damit beispielsweise NFS und NIS ordnungsgemäß funktionieren, muss zuerst der RPC-Portmapper-Daemon rpcbind gestartet werden.

/etc/init.d/

Um eine Duplizierung von Skripten zu vermeiden, sind die Dateien in den Verzeichnissen rc#.d/ tatsächlich symbolische Links zu Skriptdateien, die sich im Verzeichnis /etc/init.d/ befinden. Jeder auf dem System installierte Dienst installiert ein Skript in diesem Verzeichnis, mit dem dieser Dienst gesteuert werden kann. Diese Skripte sind so geschrieben, dass sie Startoptionen annehmen, die angeben, dass sie den Dienst starten sollen, und Stoppoptionen, die angeben, dass sie den Dienst beenden sollen.

Upstart- und SysV-Runlevel-Kompatibilität

Da Upstart keine interne Vorstellung von Runlevels hat, wird die Unterstützung für sie durch die Datei /etc/init/rc.conf definiert. Diese Unterstützung existiert, um Rückwärtskompatibilität für die Single Unix Specification und frühere SysV-Init-Implementierungen bereitzustellen.

/etc/rc.local

Benutzerdefinierte Skripte zum Ausführen von Aufgaben auf dem System können im Verzeichnis /etc/init.d/ erstellt werden, und dann können symbolische Links zu diesen Skripten in den Verzeichnissen /etc/rc#.d/ erstellt werden, um die Skripte zu starten oder zu stoppen notwendig. Für einige Aufgaben ist es jedoch übertrieben, vollständige Init-Skripte im System-V-Stil mit Start- und Stoppoptionen zu erstellen. Einige Aufgaben müssen zum Beispiel einmal ausgeführt werden, wenn das System hochfährt, müssen aber nie beendet werden, oder müssen nicht jedes Mal ausgeführt werden, wenn das System die Runlevel ändert, oder können aus anderen Gründen nicht vollständig von a ausgeführt werden System-V-Init-Skript.


Linux
  1. Was ist der aktuelle Runlevel des Linux-Systems?

  2. Linux – Wie ändere ich das vergessene Root-Passwort?

  3. Linux – Warum wird das Root-Verzeichnis mit einem / -Zeichen gekennzeichnet?

  4. Grundlegendes zu SELinux-Richtlinien in Linux

  5. Was ist der Zweck der Gruppe „Wheel“ in Linux?

Linux-Runlevels richtig verstehen

Die for-Schleife in Shell-Skripten verstehen

So ändern Sie das Root-Passwort unter Linux

Verstehen des Zeitbefehls in Linux

Verstehen der /etc/fstab-Datei unter Linux

So ändern Sie das Passwort des Root-Kontos von Linux VPS