Ga naar inhoud

De bot op de achtergrond uitvoeren

In dit artikel

Om een Python-bot (of een andere) continu te laten draaien, automatisch te laten herstarten bij fouten en na een serverherstart te laten starten, is het simpelweg uitvoeren van python main.py niet voldoende. Je hebt een volwaardige achtergrondservice nodig.

Hieronder staan drie bewezen methoden: van de eenvoudige screen tot de industriële systemd. Kies op basis van uw vereisten.

Het 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 afhankelijkheden te isoleren:

    python3 -m venv venv
    source venv/bin/activate
    

  3. Installeer afhankelijkheden:

    pip install -r requirements.txt
    # Als het bestand niet bestaat — installeer handmatig, bijv. 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 toegewijde 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 aan de slag te gaan.
Nadelen: start niet opnieuw op na een crash of herstart — niet geschikt voor productie.

Installatie:

sudo apt update && sudo apt install screen -y

Starten:

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

Beheer:

Actie Opdracht
Loskoppelen van sessie (achtergrond laten draaien) Ctrl + A, dan D
Lijst van sessies bekijken screen -ls
Terugkeren naar sessie screen -r bot
Sessie beëindigen van binnenuit Ctrl + A, dan K > Y

Informatie

Bij een serverherstart of scriptcrash blijft de bot gestopt. 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 tot data nodig heeft
    
    
    [Install]
    WantedBy=multi-user.target
    

  3. Schakel de service in:

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

  4. Controleer status en logs:

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

Beveiligingstips

Beperk de service om toegang te krijgen 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 — procesbeheerder (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

Nuttige opdrachten:

Opdracht Doel
pm2 list Lijst van processen
pm2 logs my-bot Logs bekijken
pm2 monit Realtime monitoring
pm2 startup Autostart configureren na herstart
pm2 save Huidige processen opslaan

Informatie

Na pm2 startup, volg de instructies in de terminal — PM2 zal een systemd-unit genereren voor autostart.

Vergelijking van methoden

Criterium screen systemd PM2
Autostart na herstart 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
Configuratiecomplexiteit Laag Gemiddeld Laag (maar vereist Node.js)
Geschikt voor productie Nee Aanbevolen Ja (als Node.js al wordt gebruikt)

Aanvullend

Stel waarschuwingen in wanneer de bot stopt (bijv. via systemd + healthchecks.io);
Werk afhankelijkheden regelmatig bij pip list --outdated;
Gebruik .env-bestanden en python-dotenv om tokens op te slaan (en sluit ze uit van Git!).

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