Eine App mit & oder nohup zu starten, ist in Ordnung, bis der Server neu bootet, der Prozess abstürzt oder Sie seine Logs finden wollen — dann fällt es auseinander. systemd ist die Standardantwort: Es startet Ihre App beim Booten, startet sie neu, wenn sie stirbt, und erfasst ihre Logs. Ein Skript oder eine Binärdatei in einen verwalteten Dienst zu verwandeln, ist eine kleine Datei.
1. Schreiben Sie eine Unit-Datei
Erstellen Sie /etc/systemd/system/myapp.service:
[Unit]
Description=My application
After=network.target
[Service]
User=myapp
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/python3 /opt/myapp/run.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Passen Sie ExecStart, WorkingDirectory und User an Ihre App an. Restart=always ist das, was sie am Leben hält.
2. Erstellen Sie einen dedizierten Benutzer (empfohlen)
sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp
Als Nicht-root-Benutzer zu laufen begrenzt den Schaden, falls die App je kompromittiert wird.
3. Aktivieren und starten Sie ihn
sudo systemctl daemon-reload
sudo systemctl enable --now myapp
enable lässt ihn beim Booten starten; --now startet ihn sofort.
4. Prüfen Sie Status und Logs
sudo systemctl status myapp
journalctl -u myapp -f # Live-Logs verfolgen
Alltagsbefehle
sudo systemctl restart myapp # nach einer Änderung neu starten
sudo systemctl stop myapp # anhalten
sudo systemctl disable myapp # nicht mehr beim Booten starten
Ehrliche Warnungen
- Führen Sie nach dem Bearbeiten
daemon-reloadaus einer Unit-Datei, sonst nutzt systemd die alte Version. - Achten Sie auf Absturzschleifen. Scheitert die App sofort, versucht
Restart=alwayses endlos —RestartSec=5entzerrt die Versuche; beheben Sie den Grundfehler über die Logs. - Bevorzugen Sie ein Nicht-root-
User=, damit eine kompromittierte App nicht den ganzen Server besitzt.
Nächste Schritte
Ein systemd-Dienst ist die Art, wie Sie alles rund um die Uhr laufen lassen — zum Beispiel einen KI-Agenten, der rund um die Uhr läuft oder das Relay hinter einem selbstgehosteten RustDesk-Server. Ist Ihre App stattdessen containerisiert, spielt Dockers --restart unless-stopped dieselbe Rolle — siehe wie man Docker installiert.
Kommentare
Noch keine Kommentare. Sei der Erste.