Ga naar inhoud

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

  1. Plaats de botcode, bijvoorbeeld in /home/user/bot:

    mkdir -p /home/user/bot && cd /home/user/bot
    

  2. Maak een virtuele omgeving aan en activeer deze om dependencies te isoleren:

    python3 -m venv venv
    source venv/bin/activate
    

  3. Installeer de dependencies:

    pip install -r requirements.txt
    # Als het bestand niet bestaat — installeer handmatig, bijvoorbeeld: pip install python-telegram-bot
    

  4. Test de handmatige start:

    python main.py
    

Opmerking

Voer de bot niet uit als root tenzij dit noodzakelijk is. Het is beter om een specifieke gebruiker aan te maken:

sudo adduser --disabled-login botuser
sudo chown -R botuser:botuser /home/user/bot

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:

sudo apt update && sudo apt install screen -y

Starten:

screen -S bot  # maak een genaamde sessie aan
source venv/bin/activate
python main.py

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.

  1. Maak een unit-bestand aan:

    sudo nano /etc/systemd/system/bot.service
    

  2. 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
    

  3. Schakel de service in:

    sudo systemctl daemon-reload
    sudo systemctl enable bot.service   # autostart bij boot
    sudo systemctl start bot.service    # nu starten
    

  4. Controleer de status en logs:

    sudo systemctl status bot.service
    journalctl -u bot.service -f --since "1 hour ago"
    

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:

cd /home/user/bot
pm2 start main.py --name "my-bot" --interpreter ./venv/bin/python

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!).

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×