- Benötigst du rc.local noch?
- Aktivieren von rc.local in Ubuntu (18.04, 20.04, 22.04 und höher)
- Aktivierung von rc.local unter CentOS 7/8 und AlmaLinux 8/9
- Praktische Beispiele und praktische Tipps
- Allgemeines Debugging
- Alternativen und bewährte Verfahren
- Sicherheits- und Betriebstipps
- Der Bezug dieser Schulung zu den Dienstleistungen des Unternehmens
- Schlussfolgerung und abschließende Empfehlungen
- Häufig gestellte Fragen
Benötigst du rc.local noch?
In dieser Schritt-für-Schritt-Anleitung lernen wir, wie man eine herkömmliche Datei erstellt. rc.local in gängigen Linux-Distributionen wie Ubuntu, CentOS Und AlmaLinux Aktivieren und führen Sie die erforderlichen Skripte oder Befehle beim Systemstart aus.
Obwohl systemd Es hat sich als Standard-Initialisierungsmethode etabliert. rc.local Es eignet sich weiterhin gut, um beim Systemstart schnell und einfach kurze Skripte auszuführen. Im Folgenden finden Sie Methoden, Beispiele, Sicherheitstipps und moderne Alternativen.
Aktivieren von rc.local in Ubuntu (18.04, 20.04, 22.04 und höher)
In neuen Ubuntu-Versionen, die systemd rc.local kann wie folgt aktiviert werden. Die allgemeinen Schritte umfassen das Erstellen der Datei, das Festlegen der Berechtigungen und das Erstellen/Aktivieren einer Unit für die Kompatibilität mit systemd.
Allgemeine Schritte
- Datei erstellen /etc/rc.local Und fügen Sie die gewünschten Shebang-Zeilen und Befehle hinzu.
- Die Ausführungsberechtigung für die Datei wird erteilt.
- Erstellen oder aktivieren Sie die rc.local-Unit in systemd (falls sie nicht existiert).
- Dienststatus laden, aktivieren und prüfen.
Beispiel einer Beispieldatei /etc/rc.local (Immer am Ende) Ausgang 0 Ort):
#!/bin/bash
# Example: start Docker container named myapp
docker start myapp || docker run -d --name myapp myimage
# simple sysctl
/sbin/sysctl -w net.ipv4.ip_forward=1
exit 0Legen Sie anschließend die Berechtigung fest:
sudo chmod +x /etc/rc.localFalls die entsprechende Einheit nicht existiert, erstellen Sie sie:
sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.local Compatibility
ConditionPathExists=/etc/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOFUnd schließlich:
sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -b
Aktivierung von rc.local unter CentOS 7/8 und AlmaLinux 8/9
RHEL-basierte Distributionen haben unterschiedliche Wege; der traditionelle Weg ist üblicherweise /etc/rc.d/rc.local Die allgemeinen Schritte ähneln denen von Ubuntu, aber achten Sie auf den SELinux-Pfad und die Hinweise.
Übliche Routen
- /etc/rc.d/rc.local Der traditionelle Weg führt über RHEL/CentOS.
- Bei manchen Systemen kann die Verbindung fehlschlagen. /etc/rc.local Existieren.
Aktivierungsschritte (CentOS / AlmaLinux)
Datei erstellen/bearbeiten:
sudo nano /etc/rc.d/rc.local
#!/bin/bash
# Example: mount NFS or start a container
mount -a
/usr/bin/my-startup-script.sh &
exit 0Exekutivlizenz:
sudo chmod +x /etc/rc.d/rc.localFalls die Einheit nicht existiert, erstellen Sie sie:
sudo tee /etc/systemd/system/rc-local.service > /dev/null <<'EOF'
[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionPathExists=/etc/rc.d/rc.local
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
EOFUnd dann:
sudo systemctl daemon-reload
sudo systemctl enable rc-local.service
sudo systemctl start rc-local.service
sudo systemctl status rc-local.service
sudo journalctl -u rc-local.service -bsudo restorecon -v /etc/rc.d/rc.local
# or temporarily change context
sudo chcon -t bin_t /etc/rc.d/rc.localEs ist außerdem besser, in Skripten wie diesen absolute Pfade zu verwenden. /usr/bin/docker Dient zur Reduzierung der Abhängigkeit von PATH.
Praktische Beispiele und praktische Tipps
Beispiel – Ausführen des Docker-Launcher-Skripts
#!/bin/bash
# start redis container at boot
/usr/bin/docker run -d --name redis-cache --restart unless-stopped redis:6
exit 0Notiz: Nutzen Sie die Option --restart unless-stopped Sorgt dafür, dass Docker das Rollback von Containern selbst durchführt.
Beispiel – Netzwerk-Mount vor dem Ausführen des Dienstes
Falls das Skript NFS-Mounts benötigt, modifizieren Sie die systemd-Unit mit den entsprechenden Abhängigkeiten:
[Unit]
After=network-online.target remote-fs.target
Wants=network-online.target remote-fs.targetEin langes Skript oder einen permanenten Dienst ausführen – eine bessere Methode
Für langlaufende oder serviceorientierte Aufgaben ist es besser, eine dedizierte systemd-Unit zu erstellen, um Funktionen wie Neustart und Überwachung zu nutzen:
sudo tee /etc/systemd/system/myjob.service > /dev/null <<'EOF'
[Unit]
Description=My Long Running Job
After=network-online.target
[Service]
Type=simple
User=myuser
ExecStart=/usr/local/bin/my-long-script.sh
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOFsudo systemctl daemon-reload
sudo systemctl enable --now myjob.service
Allgemeines Debugging
- Dienst im Fehlerzustand: Aus
sudo journalctl -u rc-local.service -bVerwenden Sie diese Funktion, um das Protokoll anzuzeigen. - Berechtigungen: Stellen Sie sicher, dass die Datei ausführbar ist (
chmod +x) und das ganze Drumherum existiert am Anfang. - Relative Pfade: Verwenden Sie für Binärdateien immer absolute Pfade.
- Umweltvariablen: rc.local verfügt über eine eingeschränkte Umgebung; Variablen wie PATH müssen explizit definiert oder der vollständige Pfad angegeben werden.
- SELinux: Prüfen Sie AVC-Fehler und setzen Sie den Kontext.
- Abhängigkeiten: Wenn das Skript vom Netzwerk oder Dateisystem abhängig ist, sollte die Einheit lauten: Nachher= Und Wünsche = Es sollte geeignet sein.
Alternativen und bewährte Verfahren
- Dedizierte systemd-Einheit: Es ist die beste Option für Dienstleistungen.
- crontab @reboot: Geeignet für einfache Benutzeraufgaben:
@reboot /usr/local/bin/myscript.sh - cloud-init: Geeignet für die Erstkonfiguration in Cloud-Umgebungen.
- Konfigurationsmanagement-Tools wie Ansible: Es dient dazu, wiederholbare und überschaubare Änderungen vorzunehmen.
Sicherheits- und Betriebstipps
Von der Ausführung sensibler Befehle in rc.local Vermeiden Sie es. Es ist besser, Skripte mit spezifischen Besitzrechten auszuführen oder die … zu verwenden. Benutzer= Wird in systemd verwendet.
Skriptausgaben sollten stets protokolliert und die Berechtigungen eingeschränkt werden. Beispiel:/usr/local/bin/myscript.sh >> /var/log/rc.local.log 2>&1
chmod 700 /usr/local/bin/myscript.shBei Produktionsumgebungen sollten Sie Änderungen zunächst in einer Testumgebung prüfen, bevor Sie sie auf kritische Server anwenden.
Der Bezug dieser Schulung zu den Dienstleistungen des Unternehmens
Die Dienstleistungen unseres Unternehmens an über 85 Standorten weltweit, darunter VPS, Cloud-Server, Grafikserver (GPU), dedizierte Server und Netzwerklösungen, ermöglichen Ihnen Folgendes:
- Starten Sie Startskripte schnell auf Trading- oder Gaming-VPS.
- Auf GPU-Servern sollten Sie systemd-Units verwenden, um rechenintensive Dienste zu starten, damit die Verarbeitung nach einem Neustart ordnungsgemäß wieder aufgenommen werden kann.
- Auf Netzwerk- und Anti-DDoS-Servern werden benutzerdefinierte systemd-Units erstellt, um Netzwerk-Skripte und iptables auszuführen.
- Das Supportteam steht für SELinux, Mount-Pfade und Abhängigkeiten zur Verfügung.
Schlussfolgerung und abschließende Empfehlungen
Trotz systemd, rc.local Es ist zwar immer noch eine einfache Möglichkeit, benutzerdefinierte Befehle beim Systemstart auszuführen, aber für Stabilität und Überwachung ist es besser, systemd-Units zu verwenden.
Achten Sie stets auf Berechtigungen, SELinux und Dienstabhängigkeiten und verwenden Sie Protokolle zur Fehlersuche.
Wenn Sie einen speziellen Bedarf haben (z. B. die Ausführung eines automatisierten Handelsroboters, die Vorbereitung einer GPU-Umgebung oder die Konfiguration eines Spielservernetzwerks), steht Ihnen unser technisches Team an verschiedenen Standorten gerne zur Verfügung.









