GNU/Linux >> LINUX-Kenntnisse >  >> Debian

So führen Sie ein Skript beim Booten in Debian 11 aus

Hochfahren bezeichnet vereinfacht ausgedrückt die Zeit vom Einschalten bis zum Zeitpunkt des Benutzerstarts. Dies wird durch die Verwendung eines Boot-Skripts erreicht, das Anweisungen enthält, welcher Code geladen und welche Prozesse und Anwendungen gestartet werden sollen.

Es gibt einige Phasen des Linux-Starts (vor dem Booten in systemd oder System V init und vor dem Laden der Desktop-Umgebung), und Sie können Ihr eigenes Autostart-Skript oder -Programm in jeder Phase konfigurieren, in der es sich um einen einzelnen Befehl oder eher um einen handeln kann eine Reihe von Befehlen oder ein ausführbares Shell-Skript. Dennoch ist es informativ zu beachten, dass es einige Unterschiede in der Startprozedur zwischen verschiedenen Linux-Distributionen und -Versionen geben kann.

Moderne Versionen von Linux booten zuerst in systemd während ältere Versionen System V init verwenden . Beide Methoden führen cron aus undrc.local bevor die Desktop-Umgebungen wie KDE oder GNOME geladen werden. Auf der anderen Seite führen serverbasierte Linux-Distributionen die Standard-Shell aus, zum Beispiel Bash nachdem sich der Benutzer an der Konsole anmeldet, anstatt die Desktop-Umgebung zu laden.

Um Dienste und Skripte beim Start von Debian 11 angemessen hinzuzufügen, müssen Sie Systemd-Units erstellen. Diese Anleitung konzentriert sich auf drei Methoden zum Hinzufügen von Skripten beim Start auf Ihrem Debian 11-Rechner:

  1. Systemd verwenden
  2. Cron verwenden
  3. Verwendung von rc.local

Fangen wir an.

Was ist eine systemd-Einheit?

Systemd-Units sind Konfigurationsdateien, die Informationen für die angemessene Verwaltung oder Ausführung bestimmter Systemdateien enthalten. In systemd bezeichnet eine Einheit jede Ressource, die das System verarbeiten und verwalten kann. Systemd-Units werden normalerweise zum Starten, Stoppen, Verwalten von Diensten, Organisieren von Boot-Prozessen, Verwalten von Aufgaben und Prozessen, Erstellen von Sockets, Automount-Punkten, Austauschen von Dateien oder Partitionen, Mounten von Dateisystemen und Initialisieren von Hardware verwendet.

Systemd-Units befinden sich unter dem Verzeichnis /etc/systemd/system. Jedes Skript, das Sie beim Booten mit Systemd-Units ausführen möchten, muss in einer Datei (Unit) im oben genannten Verzeichnis angegeben werden.

Um die Beziehung zwischen systemd zu vereinfachen und Einheiten Betrachten Sie systemd besser als Trainer eines Teams als die Einheiten als die Annehmlichkeiten und Notwendigkeiten im Team, zum Beispiel Bälle, Körner, Fitnessstudio, Spielplatz, Spielausrüstung, um nur einige zu nennen. Um also einen Trainer dazu zu bringen, das Team so zu führen, dass es bessere Leistungen erbringt, nutzt er die verfügbare Ausrüstung, um das Team grundlegend zu verbessern. In ähnlicher Weise verwendet der Systemd Einheiten, um die Systemprozesse und -dienste zu steuern und zu verwalten.

Einige der Typen von Systemd-Einheiten umfassen:
  • Ziel – Eine Sammlung von Einheiten, die einen Synchronisationspunkt beschreibt. Der Synchronisationspunkt wird beim Booten verwendet, um das System in einem bestimmten Zustand hochzufahren.
  • Reittier – Eine Unit dieser Art kontrolliert den Einhängepunkt des Dateisystems.
  • Gerät – Eine Einheit dieses Typs vermittelt die gerätebasierte Aktivierung wie ein Gerätetreiber.
  • Sockel – Dieser Einheitentyp aktiviert einen Dienst, wenn der Dienst eingehenden Datenverkehr auf einem lauschenden Socket erhält.
  • Pfad – Dieser Einheitentyp überwacht Dateien/Verzeichnisse und aktiviert/deaktiviert dann einen Dienst, wenn die angegebene Datei oder das angegebene Verzeichnis abgerufen wird.
  • Timer – Dieser Einheitentyp übernimmt die Aktivierung und Deaktivierung eines bestimmten Dienstes basierend auf einem Timer oder wenn die eingestellte Zeit abgelaufen ist.
  • Geltungsbereich – Eine Einheit, die Fremdprozesse systematisiert und verwaltet.

Systemeinheiten auflisten

Unten ist eine schnelle Ansicht der vorhandenen systemd-Units in unserem System unter Verwendung von ls Befehl.

ls /etc/systemd/system

Eine der im obigen Schnappschuss ausgeschlossenen Dateien ist tomcat.service, deren Inhalt wie im folgenden Bild dargestellt ist.

Um sich mit den Einheitenkonfigurationsdateien im obigen Schnappschuss vertraut zu machen, sehen Sie sich die folgenden detaillierten Informationen an. Machen Sie sich darüber keine Sorgen, da die Einheit, die Sie zum Ausführen Ihres Skripts erstellen, etwas einfacher sein wird.

Zu den Einheitenanweisungen gehören:
  • Beschreibung: Diese Direktive erlaubt Ihnen normalerweise, eine Beschreibung für eine Einheit anzuhängen; Hier können Sie den zu quittierenden Unit-Namen einstellen.
  • Wünsche: Üblicherweise werden hier die Einheitenabhängigkeiten angegeben. Zu beachten ist, dass es für diesen ähnlichen Zweck verschiedene Richtlinien gibt. Zum Beispiel die Direktive Requires schreibt strikte Abhängigkeiten vor, ohne die das Gerät nicht funktionieren kann. Im Gegensatz zu Requires wird Wants zur Angabe von Abhängigkeiten verwendet, ohne die die Einheit weiterarbeiten kann.
  • Nach: Die aktuelle Einheit beginnt nach der in dieser Anweisung bezeichneten Einheit.
Anweisungen für den Abschnitt [Service]:

  • Typ: Verzweigung gibt an, dass der Dienst beendet werden soll, während untergeordnete Prozesse beibehalten werden, denen eine Prozessidentifikation (PID) zugewiesen werden muss.
  • Umwelt: Hier kann man die Umgebungsvariablen der Unit angeben.
  • ExecStart: Mit dieser Direktive können Sie den Pfad und die Befehle angeben, die Sie ausführen möchten.
  • ExecStop: Sie können den Befehl angeben, mit dem das Gerät gestoppt wird.
  • SuccessExitStatus: Diese Direktive erlaubt es Ihnen, Exit-Status und -Signale aufzuzählen.
  • Benutzer: Sie können den Eigentümer des Geräts identifizieren.
  • Gruppe: Sie können den Gruppeneigentümer der Einheit aufzählen.
  • UMaske: Sie können die Benutzermaske angeben.
  • RestartSec: Wenn das Gerät spontan neu startet, können Sie die Wartezeit bis zum Neustart des Dienstes angeben.
  • Neustart: Sie können für Systemd festlegen, wann das Gerät neu gestartet werden soll. Die zugänglichen Optionen sind immer on-watchdog, on-failure, on-anomal, on-success und on-abort.

Die Direktive [Installieren] in der obigen Instanz ist WantedBy.

  • Gesucht von: Mit dieser Direktive können Sie die Einheit als Abhängigkeit definieren; es ist den Wünschen verwandt Richtlinie, sondern um zu kennzeichnen, ob die aktuelle Einheit als Abhängigkeit von einer anderen Einheit gut durchdacht ist.

Andere übliche Anweisungen im Abschnitt [Unit], die im vorherigen Screenshot nicht enthalten waren:

  • Erfordert: In dieser Anweisung können Sie Abhängigkeiten festlegen, um Startfehler zu vermeiden. Im Gegensatz zu den Wünschen Wenn eine mit der Direktive Requires gekennzeichnete Abhängigkeit nicht erfüllt ist, funktioniert die Unit nicht.

Im Abschnitt [Service]:

  • PID-Datei: Die Forking-Direktive erfordert die PIDFile-Direktive, die den Pfad zur Datei PID des untergeordneten Prozesses enthält, damit Systemd ihn erkennen kann.
  • StartLimitInterval: gibt an, dass das Gerät 60 Sekunden lang 10 Versuche hat, nach einem Fehler neu zu starten.
  • StartLimitBurst: Diese Direktive zeigt das Versuchslimit, im vorherigen Beispiel zehn Versuche in 60 Sekunden.

Unter diesem Link finden Sie weitere Informationen zu Systemd-Einheiten.

Führen Sie ein Skript beim Hochfahren in Debian 11 aus

Methode 1:Systemd-Unit verwenden, um ein Skript beim Booten auszuführen

Das Ausführen eines Skripts beim Booten kann unkompliziert sein und weniger Konfiguration erfordern als die Datei tomcat.service, die wir zuvor verwendet haben, um den gemeinsamen Inhalt der Unit anzuzeigen.

Die Dateien (Units) mit den Informationen zu Skripten, die beim Booten ausgeführt werden, befinden sich in /etc/systemd/system. Um ein Skript so auszudrücken, dass es beim Booten ausgeführt wird, müssen Sie eine neue Unit für dieses Skript generieren. Als solches können Sie jeden Editor für Erstellungszwecke verwenden. In unserem Beispiel verwenden wir jedoch den Nano-Editor, in dem wir eine Unit namens script.service erstellen. Beachten Sie, dass dieser Name beliebig geändert werden kann, um Ihr Skript bequem zu identifizieren.

sudo nano /etc/systemd/system/script.service

Kopieren Sie danach den folgenden Code und fügen Sie ihn in die Datei ein, die Sie unter /etc/systemd/system.

erstellt haben
</PATH/TO/Script.sh> with the path to your script.
[Unit]

Description=Your Script Name here

After=default.target

[Service]

ExecStart=/PATH/TO/Script.sh

[Install]

Denken Sie danach daran, durch Ihren Skriptnamen und durch den Pfad zu Ihrem Skript zu ersetzen, wie unten gezeigt:

Nachdem Sie die Daten in die Datei unter /etc/systemd/system/ kopiert haben, sollten Sie sie über den unten angezeigten Befehl systemctl aktivieren.

sudo systemctl enable script.service

Hinweis: Denken Sie daran, durch den entsprechenden Namen zu ersetzen, den Sie der Einheit zugewiesen haben.

Und bumm! Jetzt ist Ihr Skript bereit für den Start in Debian 11

Methode 2:Automatisches Ausführen eines Programms beim Linux-Start über Cron

Cron ist ein Daemon, der verwendet wird, um geplante Befehle auszuführen. Die Befehle werden in der Crown-Job-Tabelle oder im Contrab gespeichert und sind für jeden Benutzer im System spezifisch. Es wird während des Systemstarts entweder von System V init oder systemd gestartet, und Sie können Ihren Job oder Ihr Programm so planen, dass es direkt während des Systemstarts selbst ausgeführt wird, indem Sie die folgenden Schritte sorgfältig durchgehen:

Schritt 1: Öffnen Sie den Standard-Contrab-Editor, indem Sie den folgenden Befehl ausführen:

crontab -e

Wenn Sie den Befehl contrab zum ersten Mal ausführen, müssen Sie einen Editor auswählen, wie im nächsten Codeabschnitt gezeigt:

$ crontab -e
no crontab for user - using an empty one

Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /bin/ed

Choose 1-3 [1]:

Nach Auswahl der angegebenen Anzahl von Optionen wird ein Contrab für Sie erstellt und mit den Rechten des Benutzers ausgeführt. Falls Sie Ihr Programm als Root-Benutzer ausführen müssen, führen Sie contrab -e als Root-Benutzer selbst aus

Schritt 2: Fügen Sie eine Zeile hinzu, die mit @reboot

beginnt
# m h dom mon dow command
@reboot

Schritt 3: Fügen Sie den bevorzugten Befehl ein, um Ihr Programm nach dem @reboot zu starten, wie unten gezeigt:

@reboot /sbin/ip addr | grep inet\ | tail -n1 | awk '{ print $2 }' > /etc/issue && echo "" >> /etc/issue

@reboot definiert die Aufgabe, die während des Systemstarts ausgeführt werden soll.

Hinweis: Stellen Sie sicher, dass Sie nach Möglichkeit den vollständigen Pfad für Ihre Programme verwenden und Ihre Befehle in einer einzigen Zeile schreiben, um Konflikte mit dem System zu vermeiden.

Schritt 4:Speichern Sie die Datei

Nachdem Sie den Editor mit „Strg + x“ geschlossen haben wie unten gezeigt

dann "Y" zu speichern,

Sie sollten einen Befehl mit der Aufschrift „installing new contrab“ sehen im Terminal wie unten gezeigt:

Schritt 5:Konfiguration

Abschließend können Sie überprüfen, ob die Kontrab korrekt konfiguriert wurde. Beachten Sie jedoch, dass dieser Schritt nicht obligatorisch ist

crontab -l

Und das sollte reichen, Leute!

Methode 3:Automatisches Ausführen eines Programms beim Linux-Start über RC.LOCAL

rc.local ist einfach ein Vermächtnis des System-V-Init-Systems. Es ist das letzte Skript, das ausgeführt wird, bevor ein Anmeldebildschirm für die Desktop-Umgebung oder eine Anmeldeaufforderung am Terminal angezeigt wird. Es ist normalerweise ein Bash-Shell-Skript, und Sie können auch alles über das Skript ausführen. Verwenden Sie die folgenden Schritte, um Ihr lokales rc.local-Skript zu konfigurieren.

Schritt 1: Erstellen Sie zunächst die Datei /etc/rc.local, falls sie in Ihrem System nicht vorhanden ist, mit Ihrem bevorzugten Editor und als Root-Benutzer. In unserem Fall verwenden wir den Vi-Editor, indem wir den folgenden Befehl ausführen:

sudo vi /etc/rc.local

Schritt 2: Platzhaltercode hinzufügen

Fügen Sie danach den folgenden Platzhaltercode in die Datei ein

#!/bin/bash

exit 0

Es muss mit dem Interpreter (/bin/bash) beginnen und mit einem Exit-Code enden (0 bedeutet Erfolg).

Schritt 3: Befehl und Logik hinzufügen

Hier fügen Sie den Dateien nach Bedarf Befehle und Logiken hinzu.

/sbin/ip addr | grep inet\ | tail -n1 | awk '{ print $2 }' > /etc/issue
echo "" >> /etc/issue

Werfen Sie einen Blick darauf, wie dies im folgenden Schnappschuss gemacht wird.

Schritt 4:Vi-Editor speichern und beenden

Um eine Datei im Vim-Editor zu speichern und zu beenden, verwenden Sie „:wq“ Befehl. Wir möchten die Datei speichern und gleichzeitig den Editor verlassen, um den Befehl auszuführen, der die Datei ausführbar macht. Drücken Sie daher ESC, um in den normalen Modus zu wechseln. Geben Sie danach :wq ein und drücken Sie "Enter."

Schritt 5: Machen Sie die Datei ausführbar

Nach dem Speichern der Datei müssen wir sie mit folgendem Befehl ausführbar machen:

sudo chmod a+x /etc/rc.local

Die Datei sollte dann beim Systemstart als Root-Benutzer ausgeführt werden.

Schlussfolgerung

Zusammenfassend lässt sich sagen, dass das Ausführen von Skripten beim Booten in Debian 11 mit Systemd, Cron und rc.local relativ einfach ist. Jeder Linux-Benutzer kann diese Aufgabe schnell erledigen, indem er eine einfache Datei im Einheitenverzeichnis erstellt. In diesem Artikel wurden verschiedene Möglichkeiten zum Ausführen eines Skripts beim Start in der Linux-Distribution, insbesondere Debian, beschrieben.

Jeder hat seine Vor- und Nachteile, aber im Allgemeinen sollten systemd und cron die am meisten bevorzugten Optionen sein. Auf der anderen Seite können Sie auch rc.local verwenden, das wir uns ebenfalls angesehen haben.


Debian
  1. utorrent-Startskript / utorrent beim Booten ausführen – Ubuntu 14.04 / 14.10

  2. Debian – Wie führt man 32-Bit-Programme auf einem 64-Bit-Debian/Ubuntu aus?

  3. Wie man ein Skript ausführt??

  4. Wie führe ich ein Skript aus, wenn eine E-Mail auf dem Mailserver eintrifft? (Debian)

  5. Wie führe ich ein Skript mit systemd kurz vor dem Herunterfahren aus?

So führen Sie ein Python-Skript in PHP aus

So installieren Sie Wine, um Windows-Anwendungen unter Debian auszuführen

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

So führen Sie Unetbootin unter Debian 11 Bullseye aus

So führen Sie ein Bash-Skript aus

Debian – Wie repariert man den Grub auf Debian?