Jeder Ausführbare Datei als Dienst in Linux ausführen
Jeder Ausführbare Datei als Linux-Dienst ausführen
Hier ist ein Satz mit Anweisungen,
wie Sie Jeden Ausführbaren als Dienst in Linux konfigurieren mit Systemd durchführen können.
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