Der Header sieht folgendermaßen aus:
#!/bin/sh -e
#
# rc.local - executed at the end of each multiuser runlevel
#
# Make sure that the script will "exit 0" on success or any other
# value on error.
Was ist der Grund für diese Datei (sie enthält nicht viel) und welche Befehle geben Sie normalerweise ein? Was ist ein "Mehrbenutzer-Runlevel"? (Ich denke, rc
ist "Befehle ausführen"?)
debian
configuration
startup
Emanuel Berg
quelle
quelle
Antworten:
Ein Runlevel ist ein Status des Systems, der angibt, ob es gerade gestartet oder neu gestartet oder heruntergefahren wird, sich im Einzelbenutzermodus befindet oder normal ausgeführt wird. Das traditionelle Init- Programm handhabt diese Aktionen, indem es zum entsprechenden Runlevel wechselt. Unter Linux lauten die Runlevel wie folgt :
Runlevel 2 bis 5 werden als Mehrbenutzer-Runlevel bezeichnet, da sich mehrere Benutzer anmelden können, im Gegensatz zu Runlevel 1, das nur für den Systemadministrator bestimmt ist.
Wenn sich der Runlevel ändert, führt init rc-Skripte aus (auf Systemen mit einem herkömmlichen Init - es gibt Alternativen wie Upstart und Systemd ). Diese rc-Skripte starten und stoppen normalerweise Systemdienste und werden von der Distribution bereitgestellt.
Das Skript
/etc/rc.local
wird vom Systemadministrator verwendet. Es wird traditionell ausgeführt, nachdem alle normalen Systemdienste gestartet wurden, und zwar am Ende des Prozesses des Wechsels zu einem Mehrbenutzer-Runlevel. Sie können es verwenden, um einen benutzerdefinierten Dienst zu starten, z. B. einen Server, auf dem installiert ist/usr/local
. Die meisten Installationen brauchen das nicht/etc/rc.local
, es wird nur für die wenigsten Fälle bereitgestellt, in denen es benötigt wird.quelle
rc.local
war aus diesem Grund nicht geeignet. Da es sich bei der ursprünglichen Frage um Debian handelt, ist dieser Kommentar für das OP wahrscheinlich irrelevant.rc.local
wurde traditionell zuletzt ausgeführt, aber ich sehe, dass FreeBSD damit aufgehört hat, als sie zu einem abhängigkeitsbasierten System gewechselt sind. Selbst wennrc.local
danach aufgerufen/etc/rc.d/sshd
würde, würde das nicht perfekt funktionieren:rc.local
würde sofort nach demsshd
Start des Prozesses aufgerufen werden , könnte aufgerufen werden, bevorsshd
das Abhören des Netzwerks begonnen hatte (aber wir würden um eine Zehntelsekunde sprechen) die meisten in einem typischen Setup).iptables-apply /root/iptables
. Ich bin dabei herauszufinden, was los ist (und warte auf den nächsten Neustart). Aber wenn Sie Vorschläge haben, bin ich ganz Ohr.rc
bedeutet "Laufkontrolle",Der
multiuser
Runlevel wird als die Ebene definiert, auf der das Netzwerk verfügbar ist, und daher können Verbindungen zum Server mithilfe dieser Dienste anstelle von fest verdrahteten Konsolenverbindungen hergestellt werden.Allerdings werden Server in der Regel von einem Serviceprozessor (unter verschiedenen Namen) verwaltet, der Netzwerkverbindungen unterstützt und sich so verhält, als ob Sie tatsächlich eine fest verdrahtete Konsole hätten.
Mit
rc.local
dieser Funktion können Sie für die Datei alle "lokalen" (standortspezifischen) Objekte (Daemons und / oder Skripts, die beim Start ausgeführt werden sollen) angeben, die Sie starten möchten. Sie können dieses Paradigma verwenden oder '/etc/init.d' entsprechend mit Start / Stopp-Skripten füllen.quelle
Ich benutze es hauptsächlich für zwei Dinge:
um das Datum und die Kernelversion jedes Neustarts zu protokollieren. Ein einfacher Einzeiler, der problemlos zu Systemen hinzugefügt werden kann, ohne dass es zu Problemen kommt. Er ist weitaus weniger anfällig für die Beschädigung des Startverlaufs als für das Ausführen
uptimed
.um das alte /etc/rc.boot/-verzeichnis wiederzubeleben, das bis vor ein paar Jahren in debian war. Ich habe immer noch ein paar einfache Skripte, die es nicht wert sind, als init.d-Skript umgeschrieben zu werden (z. B. ein Q & D-Skript, um dmesg an root zu senden, und ein anderes, um hdaparm zum Deaktivieren von Idle-Spindown und blockdev zum Festlegen von Read-Down zu verwenden. und ich bin froh, dass sie nach allen anderen Startskripten ausgeführt werden.
z.B
Außerdem habe ich Anfang dieses Jahres /etc/rc.local-Skripte für Centos und Debian-Distributionen geschrieben, um die ec2-artigen Metadaten von openstack (on
http://169.254.169.254/
) abzurufen, damit VMs ihre IP, Hostnamen, SSH-Schlüssel und andere instanzspezifische Informationen erhalten . cloud-init wurde inzwischen in diese Distributionen portiert, daher sind die Skripte jetzt veraltet.quelle
Die
rc.local
Datei unter Debian dient hauptsächlich der Kompatibilität mit Nicht-Init-Systemen. Du solltest es nicht benutzen.Stattdessen wird empfohlen, dass Sie
/etc/init.d/Skeleton
in ein neues Init-Skript kopieren , damit beim Ändern von Runlevels alle gewünschten Aktionen ausgeführt werden.inserv
Aktivieren Sie es dann mit.Update: Laut dem Kommentar unten wird diese Antwort nicht mehr empfohlen. Diese Antwort wurde jedoch einige Jahre vor der Skeleton-Verfallrate veröffentlicht, und dieses Skelett existiert seit Januar 2019 immer noch in Debian unstable.
quelle
/etc/init.d/skeleton
ist nicht der Weg.