Aller au contenu

Exécution du bot en arrière plan

Dans cet article

Pour qu'un bot Python (ou tout autre) fonctionne en continu, redémarre automatiquement en cas d'échec et démarre après le redémarrage du serveur, exécuter simplement python main.py ne suffit pas. Vous avez besoin d'un service d'arrière‑plan complet.

Voici trois méthodes éprouvées : de la simple screen à la systemd de niveau industriel. Choisissez en fonction de vos exigences.

Préparer l'environnement

  1. Placez le code du bot, par ex., dans /home/user/bot :

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

  2. Créez et activez un environnement virtuel pour isoler les dépendances :

    python3 -m venv venv
    source venv/bin/activate
    

  3. Installez les dépendances :

    pip install -r requirements.txt
    # Si le fichier n'existe pas — installez manuellement, par ex., pip install python-telegram-bot
    

  4. Testez le lancement manuel :

    python main.py
    

Note

N'exécutez pas le bot en tant que root à moins que ce ne soit nécessaire. Il est préférable de créer un utilisateur dédié :

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

Méthode 1 ecran lancement rapide (pour les tests et le developpement)

Avantages : plus simple à démarrer.
Inconvénients : ne redémarre pas après un plantage ou un redémarrage du serveur — non adapté à la production.

Installation :

sudo apt update && sudo apt install screen -y

Lancement :

screen -S bot  # créer une session nommée
source venv/bin/activate
python main.py

Gestion :

Action Commande
Se détacher de la session (la laisser en arrière‑plan) Ctrl + A, puis D
Voir la liste des sessions screen -ls
Revenir à la session screen -r bot
Terminer la session depuis l'intérieur Ctrl + A, puis KY

Information

Après redémarrage du serveur ou plantage du script, le bot restera arrêté. À utiliser uniquement pour des tâches temporaires.

Méthode 2 systemd Standard Linux pour les services (recommandé)

Avantages: démarrage automatique, redémarrage en cas d’erreurs, journalisation, intégration système.
Inconvénients: nécessite d'écrire une configuration.

  1. Créez un fichier d'unité:
sudo nano /etc/systemd/system/bot.service
  1. Collez la configuration (adaptez les chemins et l'utilisateur !):
[Unit]
Description=Telegram Bot Service
After=network.target
StartLimitIntervalSec=30
StartLimitBurst=5
[Service]
Type=simple
User=botuser                 # ← non recommandé en tant que 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"  # donc les journaux ne sont pas mis en mémoire tampon

# Sécurité (facultatif, mais recommandé)
NoNewPrivileges=true
PrivateTmp=true
ProtectSystem=strict
ProtectHome=true
ReadWritePaths=/home/user/bot/data/  # si le bot a besoin d'accéder aux données
[Install]
WantedBy=multi-user.target
  1. Activer le service:
sudo systemctl daemon-reload
sudo systemctl enable bot.service   # démarrage automatique au démarrage
sudo systemctl start bot.service    # démarrer maintenant
  1. Vérifier l'état et les journaux
sudo systemctl status bot.service
journalctl -u bot.service -f --since "1 hour ago"

Note

Restreignez le service d'accéder à des parties inutiles du système (via ProtectSystem, ReadOnlyPaths); Si le bot n'a besoin que d'Internet — ajoutez RestrictNetwork=true et configurez IPAddressAllow=...; Utilisez RuntimeDirectory= pour les fichiers temporaires.

Méthode 3 PM2 gestionnaire de processus (pour Nodejs mais prend en charge Python)

Avantages : simplicité, journaux intégrés, surveillance, interface web.
Inconvénients : nécessite Node.js, surdimensionné pour des bots Python simples.

Installation :

# Installez Node.js et npm (si ce n’est pas déjà fait)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs

# Installez PM2 globalement
sudo npm install -g pm2

Démarrage du bot Python :

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

Commandes utiles :

Commande Objectif
pm2 list Liste des processus
pm2 logs my-bot Voir les journaux
pm2 monit Surveillance en temps réel
pm2 startup Configurer l'autostart après redémarrage
pm2 save Sauvegarder les processus actuels

Information

Après pm2 startup, suivez les instructions du terminal — PM2 générera une unité systemd pour l'autostart.

Comparaison des méthodes

Critère screen systemd PM2
Démarrage automatique après redémarrage Non Oui Oui (nécessite pm2 startup)
Redémarrage en cas de plantage Non Oui Oui
Journalisation Only in session journalctl Built‑in logs
Sécurité Low High (isolation settings) Medium
Complexité de configuration Low Medium Low (mais nécessite Node.js)
Adapté à la production Non Recommandé Oui (si déjà Node.js)

Note

Configurez l'alerte lorsque le bot s'arrête (par ex., via systemd + healthchecks.io); Mettez régulièrement à jour les dépendances pip list --outdated; Utilisez des fichiers .env et python-dotenv pour stocker les tokens (et les exclure de Git!).