So verwenden Sie Systemd, um Bash -Skripte unter dem Start unter Linux auszuführen

Vor ein paar Tagen bin ich auf eine gestoßenCentos 832-Bit-Distribution und beschloss, sie auf einer alten 32-Bit-Maschine zu testen. Nachdem ich mich gestoßen hatte, stellte ich fest, dass ein Fehler die Netzwerkverbindung zum Einbruch des Netzwerks gab. Jedes Mal, wenn ich neu gestartet habe, musste ich das Netzwerk manuell wieder in die Hand bringen, was mich zu fragte: Wie kann ich diesen Prozess mit einem Skript automatisieren, das jedes Mal ausgeführt wird, wenn das System startet?

Die Lösung ist unkompliziert, und heute werde ich Ihnen zeigenSystemd Service -EinheitenAber bevor wir uns darauf einlassen, schauen wir uns zunächst einen kurzen Blick darauf an, was eine Serviceinheit ist und wie es funktioniert.

In diesem Artikel werden wir uns mit den Grundlagen befassensystemdService -Einheiten, ihre Beziehung zu “Ziele, ”Und wie man eine Serviceeinheit eingerichtet hat, um ein Skript am Boot auszuführen. Ich werde die Dinge einfach halten und mich auf die praktischen Schritte konzentrieren, damit Sie alles haben, was Sie wissen müssen, um dies selbst in Angriff zu nehmen.

Was ist eine Systemd -Serviceeinheit?

In einfachen Worten aServiceUnit in Systemd ist eine Konfigurationsdatei, die definiert, wie sich ein Dienst in Ihrem System verhalten sollte. Es kann so etwas wie ein Netzwerkdienst, ein Programm oder sogar ein Skript sein, das ausgeführt werden muss, wenn Ihr Computer startet oder an einem bestimmten Punktwährend des Boot -Prozesses.

Diese Serviceinheiten sind in gruppiertZiele, die als Meilensteine ​​oder Phasen im Boot -Prozess angesehen werden können. Zum Beispiel, wenn Ihr System das Multi-User-Ziel erreicht (Runlevel 3) bestimmte Dienste werden gestartet. Sie können sich diese Ziele als "vorstellen"Sammlungen”Von Diensten, die in verschiedenen Phasen der Bootsequenz zusammenarbeiten.

Wenn Sie die Dienste sehen möchten, die in einem bestimmten Ziel ausgeführt werden (zum Beispiel,Graphical.Target), Sie können die verwendenSystemCTL -Befehl:

systemctl --type=service

Dies zeigt Ihnen alle aktiven Dienste in Ihrem aktuellen Ziel. Einige Dienste laufen kontinuierlich, während andere einmal beginnen und dann beenden.

Listen Sie alle aktiven Dienste auf

Überprüfen Sie den Status eines Dienstes

Wenn Sie neugierig auf einen bestimmten Service sind, können Sie nutzensystemctl statusUm zu sehen, ob es aktiv oder inaktiv ist:

systemctl status firewalld.service

Dieser Befehl überprüft den Status derFirewall -Service. Sie werden feststellen, dass es aktiv ist, was bedeutet, dass es ausgeführt und aktiviert ist. Dies bedeutet, dass es beim nächsten Start automatisch startet.

Sie können auch einen Dienst vorübergehend (bis zum nächsten Start) mithilfe von:

systemctl stop firewalld.service
systemctl status firewalld.service

Dadurch wird der Firewalld -Service für diese Sitzung gestoppt, verhindern jedoch nicht, dass er das nächste Mal beginnt.

Service des Dienstes überprüfen

Dienste aktivieren und deaktivieren

Um sicherzustellen, dass ein Dienst automatisch mit dem Start beginnt, müssen Sie ihn aktivieren, wodurch ein symbolischer Link im Ordner des entsprechenden Ziels erstellt wird:

systemctl enable firewalld.service

Um es zu deaktivieren, würden Sie einfach rennen:

systemctl disable firewalld.service
Aktivieren und Deaktivieren von Systemd -Diensten

Erstellen einer benutzerdefinierten Serviceeinheit

Um einen Dienst einzurichten, der ein Skript beim Boot ausführt, erstellen wir eine neue Serviceeinheit unter dem/etc/systemd/systemVerzeichnis, hier sehen Sie vorhandene Serviceinheitsdateien und Ordner für verschiedene Ziele.

cd /etc/systemd/system
ls -l
Vorhandene Service -Einheitsdateien

Lassen Sie uns unsere eigene Serviceinheit namens erstellenconnection.serviceVerwendungVimoder deineBevorzugter TexteditorUm es zu erstellen:

vim connection.service
Or
vi connection.service

Fügen Sie der Datei den folgenden Inhalt hinzu.

[Unit]
Description=Bring up network connection
After=network.target

[Service]
ExecStart=/root/scripts/conup.sh

[Install]
WantedBy=multi-user.target

Erläuterung:

  • [Unit]: Die Metadaten der Einheit. Wir haben ihm eine Beschreibung gegeben und es gesagtnetwork.targetbedeutet, dass es erst nach der Initialisierung des Netzwerks ausgeführt wird.
  • [Service]: Dieser Abschnitt definiert den Befehl, der ausgeführt wird, wenn der Dienst startet. In diesem Fall wird das Skript ausgeführtconup.sh.
  • [Install]: In diesem Abschnitt wird SystemD angegeben, dass der Dienst am Multi-User-Ziel geladen werden sollte, was für die meisten Systeme der Standard-Runlevel ist.

Aktivieren Sie nun den Dienst, damit er beim nächsten Start automatisch startet:

systemctl enable connection.service

Sie können bestätigen, dass es aktiviert wurde, indem Sie das überprüfenmulti-user.target.wantsVerzeichnis:

ls -l multi-user.target.wants/

Die symbolische Verbindung zuconnection.servicesollte jetzt anwesend sein. Wir müssen jedoch noch das Skript erstellen, das dieser Dienst ausgeführt wird.

Überprüfen Sie die Diensteinheitsdatei

Erstellen des Skripts

Lassen Sie uns nun die erstellenconup.shSkript, das die Netzwerkverbindung erhöht.

cd /root
mkdir scripts
cd scripts
vi conup.sh

Fügen Sie die folgende Zeile hinzu, um das Netzwerk zu erweitern. Hier verwendet das Skript das SkriptNMCLI -BefehlUm die Netzwerkverbindung auf die zu bringenenp0s3Schnittstelle nach oben.

#!/bin/bash
nmcli connection up enp0s3

Vergessen Sie nicht, das Skript ausführbar zu machen.

chmod +x conup.sh

Zu diesem Zeitpunkt ist der Service bereit zu gehen.

Testen des Dienstes

Um es ohne Neustart zu testen, können Sie es manuell starten.

systemctl start connection.service

Wenn alles korrekt eingerichtet ist, wird der Dienst das Skript ausführen und Ihre Netzwerkverbindung sollte wiederhergestellt werden.

Alternativ, wenn Sie ein einfacheres Skript wie geschrieben habentouch /tmp/testbootfileSie können überprüfen, ob die Datei in erstellt wurde in/tmpUm zu bestätigen, dass der Dienst wie erwartet ausgeführt wird.

Abschluss

Inzwischen sollten Sie ein gutes Verständnis für Systemd -Service -Einheiten und die Erstellung und Verwaltung von Systemen in Ihrem System haben. Sie haben außerdem eine gemeinsame Aufgabe automatisiert, die die Netzwerkverbindung mithilfe einer einfachen Serviceeinheit auf dem BOOT aufzurufen.

Hoffentlich hilft Ihnen dieser Leitfaden, sich mit der Verwaltung von Diensten, Zielen und Skripten in systemd besser vertraut zu machen, wodurch Ihr System automatisierter und effizienter wird.