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¶
-
Placez le code du bot, par exemple dans
/home/user/bot: -
Créez et activez un environnement virtuel pour isoler les dépendances :
-
Installez les dépendances :
-
Testez le lancement manuel :
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é :
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 :
Lancement :
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.
-
Créez un fichier d'unité :
-
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 -
Activez le service :
-
Vérifiez le statut et les logs :
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 :
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 !).