Aller au contenu

Exécuter le bot en arrière-plan

Dans cet article

Pour qu'un bot Python (ou tout autre langage) s'exécute de manière continue, redémarre automatiquement en cas d'échec et démarre après un redémarrage du serveur, le simple fait de lancer python main.py ne suffit pas. Vous avez besoin d'un véritable service d'arrière-plan.

Voici trois méthodes éprouvées : de la simple commande screen au standard industriel systemd. Choisissez celle qui correspond à vos besoins.

Préparation de l'environnement

  1. Placez le code du bot, par exemple 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-les manuellement, ex: pip install python-telegram-bot
    

  4. Testez le lancement manuel :

    python main.py
    

Remarque

Ne lancez pas le bot en tant que root sauf si 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. screen - lancement rapide (pour les tests et le développement)

Avantages : le plus simple pour débuter.
Inconvénients : ne redémarre pas après un crash ou un redémarrage — ne convient pas pour 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
Détacher de la session (laisser en arrière-plan) Ctrl + A, puis D
Voir la liste des sessions screen -ls
Retourner à la session screen -r bot
Terminer la session de l'intérieur Ctrl + A, puis K > Y

Information

En cas de redémarrage du serveur ou de crash du script, le bot restera arrêté. À utiliser uniquement pour des tâches temporaires.

Méthode 2. systemd - le standard Linux pour les services (recommandé)

Avantages : démarrage automatique, redémarrage en cas d'erreur, journalisation, intégration au système.
Inconvénients : nécessite la rédaction d'un fichier de configuration.

  1. Créez un fichier d'unité :

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

  2. 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                 # ← recommandé : ne pas utiliser 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"  # pour que les logs ne soient pas mis en mémoire tampon
    
    # Sécurité (optionnel, mais recommandé)
    NoNewPrivileges=true
    PrivateTmp=true
    ProtectSystem=strict
    ProtectHome=true
    ReadWritePaths=/home/user/bot/data/  # si le bot a besoin d'accéder à des données
    
    [Install]
    WantedBy=multi-user.target
    

  3. Activez le service :

    sudo systemctl daemon-reload
    sudo systemctl enable bot.service   # démarrage automatique au boot
    sudo systemctl start bot.service    # démarrage immédiat
    

  4. Vérifiez le statut et les logs :

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

Conseils de sécurité

Restreignez l'accès du service aux parties inutiles du système (via ProtectSystem, ReadOnlyPaths) ; Si le bot a seulement besoin d'Internet — ajoutez RestrictNetwork=true et configurez IPAddressAllow=... ; Utilisez RuntimeDirectory= pour les fichiers temporaires.

Méthode 3. PM2 - gestionnaire de processus (pour Node.js, mais supporte Python)

Avantages : simplicité, logs intégrés, monitoring, interface web.
Inconvénients : nécessite Node.js, peut être excessif pour de simples bots Python.

Installation :

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

# Installer PM2 globalement
sudo npm install -g pm2

Lancez le bot Python :

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

Commandes utiles :

Commande Utilité
pm2 list Liste des processus
pm2 logs my-bot Voir les logs
pm2 monit Monitoring en temps réel
pm2 startup Configurer le démarrage automatique après reboot
pm2 save Sauvegarder les processus actuels

Information

Après avoir lancé pm2 startup, suivez les instructions dans le terminal — PM2 générera une unité systemd pour le démarrage automatique.

Comparaison des méthodes

Critère screen systemd PM2
Démarrage auto au reboot Non Oui Oui (nécessite pm2 startup)
Redémarrage en cas de crash Non Oui Oui
Journalisation (Logs) Uniquement dans la session journalctl Logs intégrés
Sécurité Faible Élevée (paramètres d'isolation) Moyenne
Complexité de configuration Faible Moyenne Faible (mais nécessite Node.js)
Convient pour la production Non Recommandé Oui (si vous utilisez déjà Node.js)

Informations complémentaires

Configurez des alertes lorsque le bot s'arrête (ex: via systemd + healthchecks.io) ;
Mettez régulièrement à jour les dépendances avec pip list --outdated ;
Utilisez des fichiers .env et python-dotenv pour stocker les tokens (et ne les incluez pas dans Git !).