Verwenden Sie systemd, um Dienste im Herzen von Linux~ zu installieren

Bild

Original: Miss Sister Taste (öffentliche WeChat-Konto-ID: xjjdog), darf gerne geteilt werden, bitte bewahren Sie diese Informationen für den Nachdruck auf.

Linux ist sehr sicher, zuverlässig und riecht wie ein dunkles Mädchen, was bedeutet, dass sie auch weich ist.

Das Betreiben eines Dienstes unter Linux ist so beruhigend wie ein Junge, der Frauenkleider in einem Schließfach versteckt.Seine Stabilität und Sicherheit können Menschen angenehm schlafen lassen.

SPOF, ist das berühmte Single-Point-Problem. Da xjjdog es hasst, die Eigenschaften von Abkürzungen zu zeigen, habe ich hier seinen vollständigen Namen eingegeben: Single Point of Failure.

Ein Linux ist ein einzelnes Linux, daher haben die darauf ausgeführten Dienste einen einzigen Problempunkt. Das Lösen von Einzelpunktproblemen kann normalerweise durch Cluster erfolgen, aber auch durch den Luxus von Schattenknoten.

Aber egal wie wir es machen, wir alle hoffen, dass ein bestimmter Prozess, der unter Linux läuft, automatisch gestartet werden kann, wenn Linux gestartet wird, und automatisch geschlossen wird, wenn Linux heruntergefahren wird. Wir möchten, dass unsere Anwendungen, wie das Fleisch und Blut von Linux, im Herzen von Linux installiert werden.

Vorbereitungsverfahren

Lange Zeit habe ich supervisorso etwas gemacht. Aber leider ist Supervisor keine vorinstallierte Software von Linux, und es ist in Python geschrieben und muss viele Abhängigkeitspakete installieren. In einer Unternehmensumgebung, in der die Netzwerkberechtigungen schrittweise verschärft werden, wird die Verwendung eines Supervisors Ihre Probleme noch verstärken.

Ja, es ist nicht so, dass der Vorgesetzte schlecht ist, es ist nur so, dass es zu umständlich ist. Häufige Anfragen nach Netzwerkberechtigungen können frustrierend und sogar überwältigend sein.

Das Nächstbeste ist systemd.

Bild

Um die Verwendung zu veranschaulichen, bereiten wir ein kleines Java-Programm vor.

import com.sun.net.httpserver.HttpContext;
import com.sun.net.httpserver.HttpServer;

import java.io.OutputStream;
import java.net.InetSocketAddress;

public class Runner {
    public static void main(String[] args) throws Exception{
        HttpServer server = HttpServer.create(new InetSocketAddress(14000), 0);
        HttpContext context = server.createContext("/");
        context.setHandler(exchange -> {
            try {
                String response = "Ojbk!";
                exchange.sendResponseHeaders(200, response.getBytes().length);
                OutputStream os = exchange.getResponseBody();
                os.write(response.getBytes());
                os.close();
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        });
        server.start();
    }
}

Dieser Code startet einen HTTP-Server auf Port 14000, und jedes Mal, wenn Sie darauf zugreifen, wird Ojbk! .

curl http://localhost:14000

Verwandeln Sie das Programm in einen Dienst

Um das obige Programm zu einem Teil des Systems zu machen, muss es gewartet werden.

[Unit]
Description=My First Java Service
After=network.target
StartLimitIntervalSec=0
[Service]
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/usr/bin/env java /opt/Runner

[Install]
WantedBy=multi-user.target

Wichtiger ist ExecStart, das genau den Befehl konfiguriert, den Sie ausführen möchten.Wir sind hier natürlich eine einfache Klassendatei.

Geben Sie der Datei einen Namen, zB xjjdogfirstjava.service, und ziehen Sie die Datei in das /etc/systemd/system/Verzeichnis.

Um diesen Dienst zu starten, führen Sie einfach den folgenden Befehl direkt aus.

systemctl start xjjdogfirstjava

Wenn Sie den gerade erstellten Dienst nicht finden können, denken Sie daran, ihn neu zu laden.

systemctl daemon-reload

Wenn Sie möchten, dass es mit Linux startet, können Sie enable ausführen, um einen Link zu erstellen.

systemctl enable xjjdogfirstjava

Neben diesen beiden sind auch Disable, Stop, Restart Standardbefehle.

Beachten Sie, dass die Konfigurationsdatei zwei Zeilen enthält.

Restart=always
RestartSec=1

Es zeigt, dass der Prozess automatisch neu gestartet wird, wenn das Programm abnormal beendet wird, und das Neustartintervall 1 Sekunde beträgt.

etwas mehr Konfiguration

Wir haben festgestellt, dass in der obigen Konfigurationsdatei After=network.targetWörter enthalten sind. Es zeigt an, dass der Dienst xjjdogfirstjava nur gestartet wird, wenn MySQL gestartet wird, dh eine Abhängigkeit wird zwangsweise angegeben.

Wenn jedoch viele kleine Partner die obige Konfiguration verwenden, stellen sie häufig fest, dass der Dienst nach mehreren automatischen Neustarts nie wieder neu gestartet wird.

Warten Sie, haben wir nicht den Parameter Restart=always verwendet?

Dies liegt daran, dass systemd standardmäßig zwei Schwellenwerte eingebaut hat.

StartLimitBurst=5 
StartLimitIntervalSec=10

Wenn Sie StartLimitIntervalSec auf 0 setzen, ist der Zweck endlich erreicht, und unser Programm kann immer fehlschlagen und ständig neu starten.

Nichtsdestotrotz ist es eine gute Praxis, ein Neustartintervall einzuhalten. Denn wenn die meisten Dienste neu gestartet werden, führt dies zu einem Anstieg der Serverressourcen.Wenn Sie nicht möchten, dass Ihr Server Alarm schlägt, unterdrücken Sie ihn nicht.

Ende

Dies ist systemd, ein in Linux integriertes Programm. Damit können Ihre Anwendungen endlich mit Linux integriert werden, und die Zeit vergeht.

Über die Autorin: Miss Sister Taste (xjjdog), ein öffentliches Konto, das Programmierern keine Umwege erlaubt. Fokus auf Infrastruktur und Linux. Zehn Jahre Architektur, zig Milliarden täglicher Datenverkehr, mit Ihnen über die Welt der hohen Nebenläufigkeit diskutieren, Ihnen einen anderen Geschmack geben. Mein persönlicher WeChat xjjdog0, willkommen, Freunde für die weitere Kommunikation hinzuzufügen.

Literatur-Empfehlungen:

1. Spielen Sie Linux
2. Welches Geschmacksalbum

3. Bluetooth wie ein Traum
4. Mord!
5. Getrennter Architekt, hinterlässt nur ein Skript
6. Der vom Architekten geschriebene BUG ist ungewöhnlich
7. Manche Programmierer sind im Grunde eine Schafherde!

Fräulein Schwester Geschmack

Neid nicht auf Mandarinenten oder Unsterbliche, sondern passe eine Codezeile für lange Zeit an

346 Originalinhalt

Ich denke du magst

Origin juejin.im/post/7122035749473648671
Empfohlen
Rangfolge