Jeder Ausführbare Datei als Dienst in Linux ausführen

Jeder Ausführbare Datei als Linux-Dienst ausführen

Inhaltsverzeichnis

Hier ist ein Satz mit Anweisungen,
wie Sie Jeden Ausführbaren als Dienst in Linux konfigurieren mit Systemd durchführen können.

linux cogs Oben ist ein AI-generiertes Bild (von Flux 1 dev Modell) der Zahnräder, die den DIY-Ansatz von Linux darstellen.

Systemd

Systemd ist ein System- und Dienstverwalter sowie Initialisierungstool in einigen Linux-Distributionen.

Einige beliebte Distributionen mit Systemd:

  • Ubuntu 16.04 oder neuer
  • Debian Jessie oder neuer
  • Arch Linux
  • CentOS 7 / RHEL 7 oder neuer
  • Fedora 15 oder neuer

systemctl

systemctl ist ein Befehlszeilentool, um systemd zu steuern.

Alle Dienste auflisten

Um alle Dienste aufzulisten, führen Sie Folgendes aus:

systemctl list-units --type=service

Eine Dienstdatei erstellen

Navigieren Sie zum systemd-Dienstverzeichnis und erstellen Sie eine neue Datei mit der Endung .service:

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

Konfigurieren Sie die Dienstdatei:

Fügen Sie den folgenden Inhalt in die Datei ein und passen Sie die Werte entsprechend an:

[Unit]
Description=Beschreibung Ihres Dienstes
After=network.target

[Service]
Type=simple
User=root
WorkingDirectory=/pfad/zu/ihrem/ausführbaren/verzeichnis
ExecStart=/pfad/zu/ihrem/ausführbaren
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Speichern Sie und schließen Sie die Datei.

Verzögerte Dienststart

Wenn Sie vermuten, dass während des Dienststarts ein Timing-Problem besteht, können Sie eine Verzögerung in Ihre Dienstkonfiguration hinzufügen:

[Service]
ExecStartPre=/bin/sleep 10

Dienstabhängigkeiten

Um Ihre Dienstabhängigkeiten zu konfigurieren: in der [Unit]-Sektion der Dienstkonfigurationsdatei,

fügen Sie die folgenden Direktiven hinzu:

Verwenden Sie After= um Dienste anzugeben, die vor Ihrem Dienst starten sollen:

After=network.target other_service.service

Verwenden Sie Requires= um harte Abhängigkeiten zu definieren:

Requires=required_service.service

Verwenden Sie Wants= für weiche Abhängigkeiten:

Wants=optional_service.service

Systemd neu laden, um den neuen Dienst zu erkennen

sudo systemctl daemon-reload

Dienstabhängigkeiten prüfen

sudo systemctl list-dependencies your_service_name.service

Dienst beim Booten aktivieren

sudo systemctl enable your_service_name.service

Um zu überprüfen, ob Ihr Dienst beim Booten gestartet wird:

sudo systemctl is-enabled your_service_name.service

Dienst starten

sudo systemctl start your_service_name.service
# oder
sudo systemctl restart your_service_name.service

Dienststatus prüfen

Wenn etwas schiefgelaufen ist – prüfen Sie Linux-Dienstprotokolle und den Status:

sudo systemctl status your_service_name.service

oder

sudo journalctl -u your_service_name.service

Für Python-Skripte

ExecStart=/pfad/zu/conda/envs/my_env_name/bin/python /pfad/zu/executable.py

Kommentare

Sie können Ihren Dienst nun mithilfe von systemctl-Befehlen wie start, stop, restart und status verwalten.

Für Ausführbare Dateien, die Parameter benötigen, passen Sie entsprechend die ExecStart-Zeile in der Dienstdatei an.

Zum Beispiel: Wenn Sie eine Java-Anwendung ausführen möchten, verwenden Sie den vollständigen Java-Befehl in der ExecStart-Zeile.

Denken Sie daran, die Dateiberechtigungen und -eigentümer entsprechend notwendig anzupassen und sicherzustellen, dass das Ausführbare Datei die richtigen Ausführungsberechtigungen hat.

Systemd-Dienstkontrolle mit chkservice

Statt auszuführen

sudo systemctl start some-serviceservice
# oder
sudo systemctl restart some-serviceservice

können Sie ein Konsolen-UI-Tool verwenden. Einfach und leichtgewichtig

sudo apt-get install chkservice

sudo chkservice