So führen Sie ein Linux-Programm beim Start mit systemd aus
Fatmawati Achmad Zaenuri/Shutterstock
Müssen Sie beim Booten ein Linux-Programm starten? Die systemd-Software bietet eine Möglichkeit, dies auf jedem zu tun Linux-Distribution mit systemd – was heutzutage die meisten von ihnen sind, einschließlich Ubuntu. Wir führen Sie durch den Prozess der Erstellung eines integrierten Dienstes – und er spricht sogar mit dem Journal.
Dieses Tutorial zeigt, wie Sie einen Systemdienst einrichten, der beim Starten Ihres Systems gestartet wird. Um ein grafisches Programm zu starten, wenn Sie sich anmelden, Verwenden Sie stattdessen den Startup-Manager Ihres Desktops .
Ausführen von Programmen beim Start
Manchmal hängt sich die Software, die Sie auf Ihrem Computer installieren, in den Linux-Startprozess ein, sodass das Programm bei jedem Start des Computers automatisch gestartet wird. Sie können das gleiche Verhalten leicht mit Ihren eigenen Programmen und Skripten erreichen oder sogar mit jedem anderen Programm, das sich auf Ihrem Computer befindet.
Die Programme, die beim Start gestartet werden, werden von |_+_| gesteuert, dem System und Service Manager. |_+_| ist der erste Prozess, der beim Start ausgeführt wird. Es hat immer Prozess ID (PID) 1. Jeder andere auf Ihrem Computer ausgeführte Prozess wird von |_+_| gestartet, oder von einem Prozess, der |_+_| hat schon angefangen.
Programme, die im Hintergrund laufen, werden aufgerufen Dämonen oder Dienstleistungen. Das d am Ende von |_+_| steht für Dämon. In diesem Artikel erstellen wir einen Beispieldienst. Um alle Kästchen anzukreuzen, muss unser Service sein:
- Integriert mit |_+_| über eine Service-Unit-Datei
- Gestartet beim Start
- Steuerbar mit |_+_|, the Steuerschnittstelle für |_+_|
- Kann ins Tagebuch schreiben
Erstellen des Serviceprogramms
Wir brauchen ein Programm, das |_+_| wird starten. Wir erstellen ein einfaches Skript namens htg.sh. Dieses Tutorial verwendet den Gedit-Texteditor, Sie können jedoch einen beliebigen Texteditor verwenden.
systemd
systemd
Anzeige
Die |_+_| Editor wird geöffnet. Kopieren Sie den folgenden Text und fügen Sie ihn in den Editor ein.
systemd
Speichern Sie Ihre Änderungen und schließen Sie den Editor.
Das Skript macht nicht viel, aber es gibt ein paar Punkte, die es wert sind, erwähnt zu werden.
- Die beiden |_+_| Zeilen werden durch |_+_| geleitet, ein Programm, das die Ausgabe von einem Programm und sendet sie an das Journal . Einträge in das Journal werden vorrangig behandelt. Wir verwenden die |_+_| (Priorität) Option, um anzugeben, dass unsere Nachrichten nur zur Information (Info) dienen. Sie sind keine wichtigen Fehler oder Warnungen.
- Es gibt ein endloses |_+_| Schleife.
- Die |_+_| Variable wird auf das aktuelle Datum und die aktuelle Uhrzeit gesetzt. Diese wird zu einer Nachricht formatiert und an das Journal gesendet.
- Das Skript schläft dann 60 Sekunden lang.
- Nach 60 Sekunden wird die Schleife wiederholt. Dieses Skript schreibt also einmal pro Minute eine Nachricht mit Zeitstempel in das Journal.
Wir kopieren das Skript in das |_+_| Verzeichnis.
systemd
Und wir müssen es ausführbar machen:
systemd
Erstellen der Service Unit-Datei
Jedes Programm, das von |_+_| . gestartet wird verfügt über eine Definitionsdatei, die als Service-Unit-Datei bezeichnet wird. Dies enthält bestimmte Attribute, die |_+_| verwenden können, um das Programm zu lokalisieren und zu starten und um einen Teil seines Verhaltens zu definieren.
Wir müssen für unseren neuen Dienst eine Unit-Datei erstellen, aber es ist ratsam, sicherzustellen, dass keine der vorhandenen Unit-Dateien den Namen hat, den wir unserem neuen Dienst geben möchten.
systemd
Sie können durch die alphabetisch sortierte Liste der Unit-Dateien blättern und überprüfen, ob der gewünschte Name nicht vergeben ist.
Anzeige
Unser Service wird htg.service heißen. Keine Unit-Dateien haben diesen Namen, also können wir fortfahren und unsere Unit-Datei erstellen.
systemctl
Die |_+_| Editor wird geöffnet. Kopieren Sie den folgenden Text und fügen Sie ihn in den Editor ein:
systemd
Speichern Sie Ihre Änderungen und schließen Sie den Editor.
Die Einträge haben diese Bedeutungen. Dies sind typische Einträge. Unser einfacher Service braucht die meisten nicht wirklich, aber sie einzubeziehen ermöglicht es uns, sie zu erklären.
- Der grüne Punkt bedeutet, dass unser Service reibungslos funktioniert.
- Der Name des Dienstes ist htg.service, und die lange Beschreibung ist die, die wir in der Unit-Datei angegeben haben.
- Uns wird angezeigt, welche Unit-Datei geladen wurde /etc/systemd/system/htg.service.
- Der Dienst ist aktiv, und die Zeit, zu der der Dienst gestartet wurde, wird für uns aufgelistet.
- Seine PID ist 7762.
- Mit dem Dienst sind zwei Aufgaben verbunden.
- Insgesamt 928 kibibyte speicher werden vom Dienst verwendet.
- Die Kontrollgruppe umfasst das Skript htg.sh und das |_+_| Befehl, der von htg.sh gestartet wurde. Meistens ist das |_+_| Befehl wird die Arbeit für diesen Dienst erledigen.
- › So finden Sie Ihr Spotify Wrapped 2021
- & rsaquo; Cyber Monday 2021: Die besten Tech-Deals
- › 5 Websites, die jeder Linux-Benutzer mit einem Lesezeichen versehen sollte
- › Funktionen vs. Formeln in Microsoft Excel: Was ist der Unterschied?
- › Der Computerordner ist 40: Wie Xerox Star den Desktop erstellte
- & rsaquo; Cyber Monday 2021: Die besten Apple-Angebote
Die Unit-Datei muss nicht ausführbar sein, aber die Berechtigungen für die Unit-Datei sollten einschränken, wer sie bearbeiten kann. Sie möchten nicht, dass ein böswilliger oder schelmischer Benutzer die Unit-Datei so ändert, dass sie ein ganz anderes Programm ausführt.
Dieser Befehl erteilt dem Besitzer Lese- und Schreibberechtigungen sowie Leseberechtigungen für die Gruppe. Andere haben keine Berechtigungen.
systemd
Wir können |_+_| . haben Überprüfen Sie die Syntax unserer Unit-Datei für uns, auch wenn der Dienst noch nicht ausgeführt wird. Eventuelle Fehler werden gemeldet. (Eigentlich ist der .service-Teil für die meisten Befehle optional.)
gedit
Anzeige
Es werden keine Fehler hervorgehoben, was bedeutet, dass unsere Unit-Datei syntaktisch korrekt ist.
Starten des Dienstes
Wenn Sie eine neue Einheitendatei hinzufügen oder eine vorhandene bearbeiten, müssen Sie |_+_| . mitteilen um die Unit-Dateidefinitionen neu zu laden.
echo
Wenn Sie möchten, dass ein Dienst beim Start gestartet wird, müssen Sie ermöglichen es:
systemd-cat
Das Aktivieren eines Dienstes startet ihn nicht, sondern legt ihn nur so fest, dass er beim Booten gestartet wird. Um den Dienst zu starten jetzt , du musst |_+_| . verwenden mit dem |_+_| Möglichkeit.
-p
Überprüfung des Dienstes
Nach dem manuellen Starten des Dienstes oder nach dem Neustart des Computers können wir überprüfen, ob unser Dienst ordnungsgemäß ausgeführt wird.
while
Der Status des Dienstes wird uns angezeigt.
Außerdem werden uns die letzten 10 Journaleinträge angezeigt, die von diesem Dienst erstellt wurden. Es überrascht nicht, dass sie alle eine Minute auseinander liegen.
Stoppen und Deaktivieren des Dienstes
Wenn Sie den Dienst stoppen müssen, können Sie dies mit diesem Befehl tun:
TIMESTAMP
Anzeige
Dies stoppt den Dienst, verhindert jedoch nicht, dass er beim nächsten Neustart des Computers neu gestartet wird. Um zu verhindern, dass der Dienst beim Start gestartet wird, müssen Sie deaktivieren es:
/usr/local/bin
Wenn der Dienst ausgeführt wird, stoppt dieser Befehl ihn nicht. Es sagt einfach |_+_| den Dienst beim nächsten Neustart nicht zu starten.
Wenn Sie den Dienst stoppen und verhindern möchten, dass er beim Start gestartet wird, verwenden Sie beide Befehle.
Service-Tipp
Stellen Sie sicher, dass Ihr Programm wie erwartet ausgeführt wird, bevor Sie versuchen, es als Dienst zu starten.
VERBUNDEN: Beste Linux-Laptops für Entwickler und Enthusiasten
WEITER LESENDave McKay benutzte zum ersten Mal Computer, als Lochstreifen in Mode waren, und programmiert seitdem. Nach über 30 Jahren in der IT-Branche ist er heute hauptberuflich Technologiejournalist. Im Laufe seiner Karriere war er als freiberuflicher Programmierer, Leiter eines internationalen Softwareentwicklungsteams, Projektleiter für IT-Services und zuletzt als Datenschutzbeauftragter tätig. Sein Schreiben wurde von howtogeek.com, cloudavvyit.com, itenterpriser.com und opensource.com veröffentlicht. Dave ist ein Linux-Evangelist und Open-Source-Verfechter.
Vollständige Biografie lesen