Exécution du bot en arrière-plan¶
Dans cet article
- Préparation de l'environnement
- Méthode 1. screen — lancement rapide (pour les tests et le développement)
- Méthode 2. systemd — standard Linux pour les services (recommandé)
- Méthode 3. PM2 — gestionnaire de processus (pour Node.js, mais prend en charge Python)
- Comparaison des méthodes
Pour qu'un bot Python (ou tout autre langage) s'exécute en continu, redémarre automatiquement en cas d'échec et redémarre après un redémarrage du serveur, il ne suffit pas simplement de lancer python main.py. Vous avez besoin d'un service en arrière-plan à part entière.
Voici trois méthodes éprouvées : de la simple commande screen à systemd de niveau industriel. Choisissez en fonction de 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
N'exécutez pas le bot en tant que root sauf si cela est 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émarrer.
Inconvénients : ne redémarre pas après un plantage ou un redémarrage — non adapté à 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 |
| Revenir à la session | screen -r bot |
| Terminer la session depuis l'intérieur | Ctrl + A, puis K > Y |
Information
Lors d'un redémarrage du serveur ou d'un 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'erreur, journalisation, intégration système.
Inconvénients : nécessite la rédaction d'une 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 # ← recommended not 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" # so logs aren't buffered # Sécurité (optionnel, mais recommandé) NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/home/user/bot/data/ # if the bot needs data access [Install] WantedBy=multi-user.target -
Activez le service :
-
Vérifiez l'état et les journaux :
Conseils de sécurité
Restreignez l'accès du service aux 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 Node.js, mais prend en charge Python)¶
Avantages : simplicité, journaux intégrés, surveillance, interface web.
Inconvénients : nécessite Node.js, excessif pour les bots Python simples.
Installation :
# Install Node.js and npm (if not already installed)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
# Install PM2 globally
sudo npm install -g pm2
Démarrer le bot 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 le démarrage automatique 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 le démarrage automatique.
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 | Uniquement dans la session | journalctl | Journaux intégrés |
| Sécurité | Faible | Élevée (paramètres d'isolation) | Moyenne |
| Complexité de configuration | Faible | Moyenne | Faible (mais nécessite Node.js) |
| Adapté à la production | Non | Recommandé | Oui (si vous utilisez déjà Node.js) |
Supplémentaire
Configurez des alertes lorsque le bot s'arrête (par exemple, 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 jetons (et excluez-les de Git !)