De bot op de achtergrond draaien¶
In dit artikel
Om een Python (of andere) bot continu te laten draaien, automatisch te laten herstarten bij fouten en te laten starten na een serverreboot, is alleen python main.py uitvoeren niet voldoende. Je hebt een volwaardige achtergrondservice nodig.
Hieronder staan drie bewezen methoden: van de eenvoudige screen tot de industriestandaard systemd. Kies de methode op basis van je vereisten.
De omgeving voorbereiden¶
-
Plaats de botcode, bijvoorbeeld in
/home/user/bot: -
Maak een virtuele omgeving aan en activeer deze om dependencies te isoleren:
-
Installeer de dependencies:
-
Test de handmatige start:
Opmerking
Voer de bot niet uit als root tenzij dit noodzakelijk is. Het is beter om een specifieke gebruiker aan te maken:
Methode 1. screen - snelle start (voor testen en ontwikkeling)¶
Voordelen: het makkelijkst om mee te beginnen.
Nadelen: herstart niet na een crash of reboot — niet geschikt voor productie.
Installatie:
Starten:
Beheer:
| Actie | Commando |
|---|---|
| De sessie verlaten (achtergrond in) | Ctrl + A, dan D |
| Lijst met sessies bekijken | screen -ls |
| Terugkeren naar sessie | screen -r bot |
| Sessie beëindigen vanuit de sessie | Ctrl + A, dan K > Y |
Informatie
Bij een serverreboot of een crash van het script zal de bot gestopt blijven. Gebruik dit alleen voor tijdelijke taken.
Methode 2. systemd - Linux-standaard voor services (aanbevolen)¶
Voordelen: autostart, herstart bij fouten, logging, systeemintegratie.
Nadelen: vereist het schrijven van een configuratie.
-
Maak een unit-bestand aan:
-
Plak de configuratie (pas paden en gebruiker aan!):
[Unit] Description=Telegram Bot Service After=network.target StartLimitIntervalSec=30 StartLimitBurst=5 [Service] Type=simple User=botuser # ← aanbevolen: niet root! Group=botuser WorkingDirectory=/home/user/bot ExecStart=/home/user/bot/venv/bin/python /home/user/bot/main.py Restart=always RestartSec=10 Environment="PYTHONUNBUFFERED=1" # zodat logs niet worden gebufferd # Beveiliging (optioneel, maar aanbevolen) NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/home/user/bot/data/ # als de bot toegang nodig heeft tot data [Install] WantedBy=multi-user.target -
Schakel de service in:
-
Controleer de status en logs:
Opmerking
Beperk de toegang van de service tot onnodige delen van het systeem (via ProtectSystem, ReadOnlyPaths); Als de bot alleen internet nodig heeft — voeg RestrictNetwork=true toe en configureer IPAddressAllow=...; Gebruik RuntimeDirectory= voor tijdelijke bestanden.
Methode 3. PM2 - process manager (voor Node.js, maar ondersteunt Python)¶
Voordelen: eenvoud, ingebouwde logs, monitoring, webinterface.
Nadelen: vereist Node.js, overkill voor eenvoudige Python-bots.
Installatie:
# Installeer Node.js en npm (als deze nog niet zijn geïnstalleerd)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
# Installeer PM2 globaal
sudo npm install -g pm2
Start de Python-bot:
Handige commando's:
| Commando | Doel |
|---|---|
pm2 list | Lijst met processen |
pm2 logs my-bot | Logs bekijken |
pm2 monit | Real-time monitoring |
pm2 startup | Configureer autostart na reboot |
pm2 save | Huidige processen opslaan |
Informatie
Volg na pm2 startup de instructies in de terminal — PM2 genereert een systemd unit voor de autostart.
Vergelijking van methoden¶
| Criterium | screen | systemd | PM2 |
|---|---|---|---|
| Autostart na reboot | Nee | Ja | Ja (vereist pm2 startup) |
| Herstart bij crash | Nee | Ja | Ja |
| Logging | Alleen in sessie | journalctl | Ingebouwde logs |
| Beveiliging | Laag | Hoog (isolatie-instellingen) | Gemiddeld |
| Complexiteit configuratie | Laag | Gemiddeld | Laag (maar vereist Node.js) |
| Geschikt voor productie | Nee | Aanbevolen | Ja (als Node.js al wordt gebruikt) |
Aanvullend
Stel meldingen in wanneer de bot stopt (bijv. via systemd + healthchecks.io);
Update regelmatig de dependencies met pip list --outdated;
Gebruik .env bestanden en python-dotenv om tokens op te slaan (en sluit deze uit van Git!).