Der er to måder, en bot "ikke virker" på en server. Den indlysende: den stopper i det sekund, du lukker SSH. Den luskede: den kører fint i to dage, crasher klokken 4 om natten på en uhåndteret fejl, og du finder ud af det timer senere, når nogen spørger, hvorfor den er nede. Begge har den samme løsning, og det er ikke "husk at genstarte den" — det er at overdrage jobbet til systemd, som holder tingene oppe, så du ikke behøver.
Hvorfor den dør, når du logger ud
Hvis du startede den med python bot.py i din SSH-session, er processen et barn af den session. Luk sessionen, og processen går med den. nohup og & dækker over dette, men de giver dig ingen genstart-ved-nedbrud og ingen start-ved-boot — så du har løst det lille problem og beholdt det store.
Den rigtige løsning: en systemd-tjeneste
Dette er hele sagen. Opret /etc/systemd/system/mybot.service:
[Unit]
Description=My bot
After=network-online.target
[Service]
WorkingDirectory=/home/youruser/mybot
ExecStart=/home/youruser/mybot/venv/bin/python bot.py
Restart=always
RestartSec=5
User=youruser
Environment=API_KEY=...
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now mybot
To linjer laver det tunge løft:
Restart=always— botten crasher, systemd bringer den tilbage på 5 sekunder. Den 4-om-natten-død bliver et 5-sekunders-blink, ingen bemærker.enable— den starter igen efter en genstart, på egen hånd. Ingen "åh, serveren genstartede, og jeg glemte at genstarte alt."
Når den stadig opfører sig dårligt — læs loggene
En bot, der bliver ved med at crash-loope, fikses ikke ved at genstarte hårdere; noget er faktisk galt. systemd fanger stdout/stderr, så:
systemctl status mybot # oppe eller nede, sidste exit-kode
journalctl -u mybot -n 100 # nylige logs + fejlen den døde på
journalctl -u mybot -f # følg live
Årsagen er næsten altid lige der: en manglende miljøvariabel, en uhåndteret undtagelse, et API-timeout, et OOM-kill. Fiks det — Restart=always er et sikkerhedsnet, ikke en kur for en rigtig fejl.
Tip: hvis loggene viser botten blive dræbt for hukommelse, er du vokset ud af boksen — tjek dimensioneringsguiden.
Når tmux eller pm2 giver mening i stedet
systemd er ikke det eneste svar, bare den bedste standard:
- tmux — perfekt til en hurtig test eller til at se en interaktiv proces. Kør, frakobl, gentilslut senere. Men den genstarter ikke ved nedbrud eller overlever en genstart, så den er ikke til produktion.
- pm2 — rimelig, hvis du allerede er i Node-verdenen og vil have dens proces-dashboard. Fælden: pm2 er selv en proces, du nu skal holde i live (som regel... via systemd). Til én bot er det et lag, du ikke behøver.
Til en enkelt altid-tændt bot eller agent er systemd det simpleste, der faktisk virker — den er allerede på serveren, kræver ingen ekstra værktøjer, og gør genstart, boot-start og logning ud af boksen.
Den ærlige bundlinje
Oppetid handler ikke om en større server eller mere disciplin — det handler om ikke at knytte din proces til din bærbare. Pak den ind i en systemd-unit med Restart=always og enable, og tjek journalctl, når noget er galt. Gør det én gang, og din bot forbliver oppe, uanset om du kigger eller sover. (Ny boks? Lås den ned først — en 24/7-bot er også et 24/7-mål.)
Har brug for et sted at køre den? Et Nano-abonnement ($3/md) holder en bot i live 24/7 — systemd gør resten.
Kommentarer
Ingen kommentarer endnu. Vær den første.