EQVPS

Sådan opretter du en systemd-tjeneste for at holde en app kørende

Gør ethvert script eller enhver app til en styret tjeneste, der starter ved opstart, genstarter hvis den crasher, og logger til journalctl. Skriv en unit-fil, aktivér den, og tjek dens status — standardmåden at køre noget 24/7 på Linux.

At køre en app med & eller nohup går fint, indtil serveren genstarter, processen crasher, eller du vil finde dens logger — så falder det fra hinanden. systemd er standardsvaret: den starter din app ved opstart, genstarter den hvis den dør, og opfanger dens logger. At gøre et script eller en binær til en styret tjeneste er én lille fil.

1. Skriv en unit-fil

Opret /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

Tilpas ExecStart, WorkingDirectory og User til din app. Restart=always er det, der holder den i live.

2. Opret en dedikeret bruger (anbefalet)

sudo useradd --system --no-create-home --shell /usr/sbin/nologin myapp
sudo chown -R myapp:myapp /opt/myapp

At køre som ikke-root-bruger begrænser skaden, hvis appen nogensinde bliver kompromitteret.

3. Aktivér den og start den

sudo systemctl daemon-reload
sudo systemctl enable --now myapp

enable får den til at starte ved opstart; --now starter den øjeblikkeligt.

4. Tjek status og logger

sudo systemctl status myapp
journalctl -u myapp -f       # følg live-logger

Dagligdags kommandoer

sudo systemctl restart myapp   # genstart efter en ændring
sudo systemctl stop myapp      # stop den
sudo systemctl disable myapp   # stop med at starte ved opstart

Ærlige advarsler

Næste skridt

En systemd-tjeneste er, hvordan du holder hvad som helst kørende 24/7 — for eksempel en AI-agent, der kører døgnet rundt eller relæet bag en selvhostet RustDesk-server. Hvis din app i stedet er containeriseret, spiller Dockers --restart unless-stopped den samme rolle — se sådan installerer du Docker.

FAQ

Hvorfor bruge systemd i stedet for bare at køre appen i baggrunden?

En baggrundsproces (med & eller nohup) dør ved genstart, kommer ikke tilbage hvis den crasher, og spreder sine logger. En systemd-tjeneste starter automatisk ved opstart, genstarter ved fejl, og sender sit output til journalctl. Det er den standard, pålidelige måde at køre noget langlivet på Linux.

Hvor hører unit-filer til?

Dine egne tjenester hører til i /etc/systemd/system/, én fil per tjeneste, navngivet noget.service. Efter du har oprettet eller redigeret en, kør 'systemctl daemon-reload' så systemd opfanger ændringen, aktivér den derefter og start den.

Hvad gør 'Restart=always', og er der ulemper?

Den beder systemd om at genstarte tjenesten hver gang den afsluttes, uanset årsag — nøglen til at holde noget kørende. Den eneste hage er en crash-løkke: hvis appen fejler øjeblikkeligt ved start, bliver systemd ved med at genstarte den. Tilføj 'RestartSec=5' for at sprede forsøgene, og tjek loggerne for at rette den underliggende fejl.

Hvordan ser jeg tjenestens logger?

Brug 'journalctl -u yourservice -f' for at følge live-output, eller uden -f for at læse historikken. systemd opfanger stdout og stderr automatisk, så du behøver ikke selv koble logfiler til.

Skal tjenesten køre som root?

Helst ikke. Opret en dedikeret ikke-root-bruger og sæt 'User=' i uniten, så et kompromis af appen ikke overlader hele maskinen. Kør kun som root når tjenesten virkelig har brug for det.

Kommentarer

Ingen kommentarer endnu. Vær den første.

Skriv en kommentar

Kommentarer modereres, før de vises.