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¶
-
Placez le code du bot, par ex., dans
/home/user/bot: -
Créez et activez un environnement virtuel pour isoler les dépendances :
-
Installez les dépendances :
-
Testez le lancement manuel :
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é :
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 :
Lancement :
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 K → Y |
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.
- 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 # ← 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
- 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
- Vérifier l'état et les journaux
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 :
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!).