Enthält der RC-Ordner Dateien, die beim Booten gestartet werden?

Enthält der RC-Ordner Dateien, die beim Booten gestartet werden?

Ich habe eine Datei in erstellt /etc/rc0.dund sie genannt rc.local.

In dieser Datei habe ich eine Zeile hinzugefügt, die eine andere Datei ausführt, die ich eingefügt hatte Desktop. Ich habe das alles gemacht, damit der Befehl beim Booten ausgeführt werden kann. Ich bin gefolgtdie Anweisungen in diesem Artikel(die erste Methode), aber nichts scheint zu funktionieren.

Warum funktioniert das nicht?

Antwort1

/etc/rc.d/in den von Ihnen verlinkten Anweisungen wird ein größtenteils historisches Verzeichnis erwähnt, das früher verwendet wurde, um alle Startskriptverzeichnisse zusammenzufassen: Es gab /etc/rc.d/init.d/, /etc/rc.d/rc0.d/, /etc/rc.d/rc1.dusw. Die meisten modernen Distributionen haben sich schon lange dafür entschieden, das rc.dVerzeichnis wegzulassen und die anderen Verzeichnisse direkt darunter zu platzieren /etc/.

/etc/rc0.d/soll symbolische Links zu Skripten enthalten (der tatsächliche Speicherort der Skripte sollte sein /etc/init.d/), die ausgeführt werden sollen beiHerunterfahren oder Ausschalten des Systems.

/etc/rc6.d/ist für Links zu Skripten, die ausgeführt werden sollen beiNeustart(d. h. beim Herunterfahren des Systems mit der Absicht, es sofort wieder neu zu starten, etwa nach der Installation eines Kernel-Updates).

Das am besten geeignete Verzeichnis für einen Link zu Ihrem Skript wäre entweder /etc/rc3.d/oder /etc/rc5.d/, abhängig von Ihrer Systemkonfiguration und dem Standard-Runlevel Ihres Systems (bei Verwendung von SysVinit). Auf Debian basierende Linux-Distributionen verwenden im Allgemeinen Runlevel 3 für den normalen Mehrbenutzerstatus (unter der Annahme klassischen SysVinits), während die auf RedHat/Fedora basierenden Distributionen Runlevel 5 für den Mehrbenutzerstatus mit aktivierter GUI-Anmeldung und Runlevel 3 für den Mehrbenutzerstatus mit deaktiviertem lokalem X11-GUI-Subsystem verwenden würden.

Die Namen der symbolischen Links in allen /etc/rc?.d/Verzeichnissen sollten entweder mit einem großen S oder einem großen K beginnen, gefolgt von einer (normalerweise) zweistelligen Zahl, um die relative Platzierung des Skripts in der Startreihenfolge unter anderen Links in diesem Verzeichnis zu identifizieren. Das große S würde das System dazu veranlassen, das verknüpfte Skript mit dem Befehlszeilenparameter auszuführen start, während K dazu führen würde, dass stattdessen der Parameter stopverwendet wird.

Ihr Skript sollte also in platziert worden sein /etc/init.d/rc.local, und dann sollten Sie einen oder beide symbolischen Links wie folgt erstellt haben:

ln -s /etc/init.d/rc.local /etc/rc3.d/S99rc.local
ln -s /etc/init.d/rc.local /etc/rc5.d/S99rc.local

Aber das ist nicht alles!

Moderne Linux-Distributionen, selbst solche, die das klassische SysVinit anstelle von verwenden systemd, neigen dazu, verschiedene Lösungen zu verwenden, um die Ausführung verschiedener Systemstartaufgaben zu parallelisieren, anstatt sie streng nacheinander auszuführen. Dies liegt daran, dass auf modernen Multi-Core-CPUs die Parallelisierung den Startvorgang viel schneller macht. In diesem Fall sollten Sie am Anfang Ihres Skripts einen speziell formatierten Kommentarblock hinzufügen, um zu definieren, von welchen Systemdiensten Ihr Skript abhängt, da die Parallelisierungslogik das Skript sonst möglicherweise ausführtzu früh, bevor zunächst die benötigten Systemdienste gestartet werden.

Wenn Ihre Distribution verwendet systemd, ist dies besonders wichtig, da selbst die „Werksvorgabe“ einiger Distributionen rc.localziemlich früh im Startvorgang ausgeführt wird, sofern Sie nicht geeignete Abhängigkeitsdefinitionen hinzufügen.

Sehenhttp://refspecs.linuxbase.org/LSB_3.1.1/LSB-Core-generic/LSB-Core-generic/initscrcomconv.htmlfür aktuelle Spezifikationen des empfohlenen Kommentarblocks für Start-/Herunterfahrskripte im SysVinit-Stil.

Kurz gesagt, Sie möchten vielleicht am Anfang Ihres rc.localSkripts etwas wie das Folgende haben:

### BEGIN INIT INFO
# Provides: rc.local
# Required-Start: $local_fs $network $remote_fs
# Required-Stop: $local_fs $network $remote_fs
# Default-Start:  2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: run locally-configured start-up commands
### END INIT INFO

Meiner Meinung nach ist die Methode-1 indie Anleitung die du verlinkt hastenthält unvollständige und veraltete Ratschläge. Die anderen beiden Methoden sind für einen neuen Benutzer möglicherweise einfacher, enthalten jedoch keine Anweisungen dazu, wie festgestellt werden kann, ob diese Methoden in einer bestimmten Distribution anwendbar sind oder nicht.

verwandte Informationen