EQVPS

Einen systemd-Dienst erstellen, damit eine App weiterläuft

Verwandeln Sie ein Skript oder eine App in einen verwalteten Dienst, der beim Booten startet, nach einem Absturz neu startet und nach journalctl protokolliert. Schreiben Sie eine Unit-Datei, aktivieren Sie sie und prüfen Sie den Status — die Standardmethode, um unter Linux etwas rund um die Uhr laufen zu lassen.

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

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.

FAQ

Warum systemd statt die App einfach im Hintergrund laufen zu lassen?

Ein Hintergrundprozess (mit & oder nohup) stirbt beim Neustart, kommt nach einem Absturz nicht zurück und verstreut seine Logs. Ein systemd-Dienst startet automatisch beim Booten, startet bei einem Fehler neu und sendet seine Ausgabe an journalctl. Es ist die standardmäßige, zuverlässige Art, etwas Langlebiges unter Linux laufen zu lassen.

Wohin gehören Unit-Dateien?

Ihre eigenen Dienste kommen nach /etc/systemd/system/, eine Datei je Dienst, benannt als etwas.service. Nach dem Erstellen oder Bearbeiten führen Sie 'systemctl daemon-reload' aus, damit systemd die Änderung übernimmt, dann aktivieren und starten Sie ihn.

Was macht 'Restart=always', und gibt es Nachteile?

Es weist systemd an, den Dienst jedes Mal neu zu starten, wenn er sich beendet, aus welchem Grund auch immer — der Schlüssel, um etwas am Laufen zu halten. Der einzige Haken ist eine Absturzschleife: Scheitert die App beim Start sofort, startet systemd sie immer wieder neu. Fügen Sie 'RestartSec=5' hinzu, um Versuche zu entzerren, und prüfen Sie die Logs, um den zugrunde liegenden Fehler zu beheben.

Wie sehe ich die Logs des Dienstes?

Nutzen Sie 'journalctl -u yourservice -f', um die Live-Ausgabe zu verfolgen, oder ohne -f, um den Verlauf zu lesen. systemd erfasst stdout und stderr automatisch, sodass Sie keine Log-Dateien selbst verdrahten müssen.

Sollte der Dienst als root laufen?

Vorzugsweise nicht. Erstellen Sie einen dedizierten Nicht-root-Benutzer und setzen Sie 'User=' in der Unit, damit eine Kompromittierung der App nicht die ganze Maschine ausliefert. Laufen Sie nur als root, wenn der Dienst es wirklich braucht.

Kommentare

Noch keine Kommentare. Sei der Erste.

Kommentar hinterlassen

Kommentare werden vor der Anzeige moderiert.