Lernen Sie Linux kennen: Das Verzeichnis /etc/init.d

Wenn Sie Linux verwenden, haben Sie höchstwahrscheinlich vom Verzeichnis init.d gehört . Aber was genau macht dieses Verzeichnis? Letztendlich macht es eine Sache, aber es macht diese eine Sache für Ihr gesamtes System, also ist init.d sehr wichtig. Das Verzeichnis init.d enthält eine Reihe von Start / Stopp-Skripten für verschiedene Dienste auf Ihrem System. Alles von acpid bis x11-common wird von diesem Verzeichnis aus gesteuert. So einfach ist das natürlich nicht.

Wenn Sie sich das Verzeichnis / etc ansehen, finden Sie Verzeichnisse in der Form rc # .d (wobei # eine Zahl für eine bestimmte Initialisierungsstufe ist - von 0 bis 6). In jedem dieser Verzeichnisse befindet sich eine Reihe weiterer Skripte, die die Prozesse steuern. Diese Skripte beginnen entweder mit einem "K" oder einem "S". Alle "K" -Skripte werden vor "S" -Skripten ausgeführt. Und je nachdem, wo sich die Skripte befinden, wird bestimmt, wann die Skripte gestartet werden. Zwischen den Verzeichnissen arbeiten die Systemdienste wie eine gut geölte Maschine zusammen. Es gibt jedoch Situationen, in denen Sie einen Prozess sauber und ohne Verwendung der Befehle kill oder killall starten oder stoppen müssen. Hier bietet sich das Verzeichnis /etc/init.d an.

Wenn Sie eine Distribution wie Fedora verwenden, finden Sie dieses Verzeichnis möglicherweise in /etc/rc.d/init.d . Unabhängig vom Standort dient es demselben Zweck.

Um eines der Skripte in init.d manuell steuern zu können, müssen Sie über Root- (oder Sudo-) Zugriff verfügen. Jedes Skript wird als Befehl ausgeführt und die Struktur des Befehls sieht folgendermaßen aus:

/etc/init.d/command OPTION

Dabei ist command der auszuführende Befehl und OPTION kann einer der folgenden sein:

  • Start
  • halt
  • neu laden
  • Neustart
  • Nachladen erzwingen

Am häufigsten werden Sie entweder starten, stoppen oder neu starten. Wenn Sie also Ihr Netzwerk anhalten möchten, können Sie den folgenden Befehl eingeben:

/etc/init.d/networking stop

Wenn Sie eine Änderung an Ihrem Netzwerk vornehmen und es neu starten müssen, können Sie dies mit dem folgenden Befehl tun:

/etc/init.d/networking restart

Einige der gebräuchlichsten Init-Skripte in diesem Verzeichnis sind:

  • Vernetzung
  • Samba
  • apache2
  • ftpd
  • sshd
  • Taubenschlag
  • MySQL

Natürlich gibt es in Ihrem Verzeichnis möglicherweise häufiger verwendete Skripte - dies hängt davon ab, was Sie installiert haben. Die obige Liste stammt aus einer Ubuntu Server 8.10-Installation, sodass bei einer Standard-Desktop-Installation einige Skripts vom Typ "Netzwerk" weniger vorhanden sind.

Aber was ist mit /etc/rc.local?

Es gibt eine dritte Option, die ich ziemlich oft verwendet habe. Diese Option ist das Skript /etc/rc.local . Diese Datei wird ausgeführt, nachdem alle anderen Skripts auf Init-Ebene ausgeführt wurden. Sie können also sicher verschiedene Befehle eingeben, die beim Start ausgegeben werden sollen. Oft werde ich in diesem Skript Anweisungen zum Mounten von Dingen wie nfs einfügen. Dies ist auch ein guter Ort, um "Troubleshooting" -Skripte unterzubringen. Als ich zum Beispiel eine Maschine hatte, die Samba aus irgendeinem Grund nicht starten wollte. Stellen Sie sicher, dass der Samba-Daemon so konfiguriert wurde, dass er beim Booten initialisiert wird. Anstatt meine ganze Zeit im Voraus damit zu verbringen, habe ich einfach die folgende Zeile eingefügt:

/etc/init.d/samba start

im Skript /etc/rc.local und Samba hat wie ein Zauber gewirkt. Irgendwann würde ich zurückkommen und dieses Problem beheben.

Abschließende Gedanken

Linux ist flexibel. Linux ist so flexibel, dass es fast zwangsläufig zahlreiche Möglichkeiten gibt, ein einzelnes Problem zu lösen. Das Starten eines Systemdienstes ist ein solches Problem. Mit Hilfe des /etc/init.d-Systems (und /etc/rc.local ) können Sie sicher sein, dass Ihr Dienst gestartet wird.