Botu arka planda çalıştırma¶
Bu makalede - Ortamı hazırlama - Yöntem 1. screen — hızlı başlatma (test ve geliştirme için) - Yöntem 2. systemd — servisler için Linux standardı (önerilen) - Yöntem 3. PM2 — işlem yöneticisi (Node.js için, ancak Python'u destekler) - Yöntem Karşılaştırması
Bir Python (veya başka bir) botun kesintisiz çalışması, hatalarda otomatik yeniden başlaması ve sunucu yeniden başlatıldıktan sonra başlaması için yalnızca python main.py komutunu çalıştırmak yeterli değildir. Tam teşekküllü bir arka plan servisine ihtiyacınız vardır.
Aşağıda, basit screen'den endüstriyel düzeyde systemd'ye kadar üç kanıtlanmış yöntem bulunmaktadır. İhtiyaçlarınıza göre seçim yapın.
Ortamı hazırlama¶
-
Bot kodunu yerleştirin, örneğin
/home/user/botdizinine: -
Bağımlılıkları izole etmek için sanal bir ortam oluşturun ve etkinleştirin:
-
Bağımlılıkları yükleyin:
-
Manuel başlatmayı test edin:
Not
Botu gerekmedikçe root olarak çalıştırmayın. Özel bir kullanıcı oluşturmak daha iyidir:
Yöntem 1. screen — hızlı başlatma (test ve geliştirme için)¶
Artıları: başlamak en kolay olanı.
Eksileri: çökme veya yeniden başlatma sonrası yeniden başlamaz — üretim için uygun değildir.
Kurulum:
Başlatma:
Yönetim:
| Eylem | Komut |
|---|---|
| Oturumdan ayrıl (arka planda bırak) | Ctrl + A, ardından D |
| Oturum listesini görüntüle | screen -ls |
| Oturuma geri dön | screen -r bot |
| İçeriden oturumu sonlandır | Ctrl + A, ardından K > Y |
Bilgi
Sunucu yeniden başlatıldığında veya betik çöktüğünde bot durdurulmuş kalacaktır. Yalnızca geçici görevler için kullanın.
Yöntem 2. systemd — servisler için Linux standardı (önerilen)¶
Artıları: otomatik başlatma, hatalarda yeniden başlatma, günlük kaydı, sistem entegrasyonu.
Eksileri: yapılandırma yazmayı gerektirir.
-
Birim dosyası oluşturun:
-
Yapılandırmayı yapıştırın (yolları ve kullanıcıyı uyarlayın!):
[Unit] Description=Telegram Bot Service After=network.target StartLimitIntervalSec=30 StartLimitBurst=5 [Service] Type=simple User=botuser # ← root olmaması önerilir! 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" # böylece günlükler tamponlanmaz # Güvenlik (isteğe bağlı, ancak önerilir) NoNewPrivileges=true PrivateTmp=true ProtectSystem=strict ProtectHome=true ReadWritePaths=/home/user/bot/data/ # botun veri erişimine ihtiyacı varsa [Install] WantedBy=multi-user.target -
Servisi etkinleştirin:
-
Durumu ve günlükleri kontrol edin:
Güvenlik ipuçları
Servisin sistemin gereksiz kısımlarına erişimini kısıtlayın (ProtectSystem, ReadOnlyPaths aracılığıyla); Bot yalnızca internete ihtiyacı varsa — RestrictNetwork=true ekleyin ve IPAddressAllow=... yapılandırın; Geçici dosyalar için RuntimeDirectory= kullanın.
Yöntem 3. PM2 — işlem yöneticisi (Node.js için, ancak Python'u destekler)¶
Artıları: basitlik, yerleşik günlükler, izleme, web arayüzü.
Eksileri: Node.js gerektirir, basit Python botları için gereğinden fazla.
Kurulum:
# Node.js ve npm'yi yükleyin (henüz yüklü değilse)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs
# PM2'yi küresel olarak yükleyin
sudo npm install -g pm2
Python botunu başlatın:
Faydalı komutlar:
| Komut | Amaç |
|---|---|
pm2 list | İşlem listesi |
pm2 logs my-bot | Günlükleri görüntüle |
pm2 monit | Gerçek zamanlı izleme |
pm2 startup | Yeniden başlatma sonrası otomatik başlatmayı yapılandır |
pm2 save | Mevcut işlemleri kaydet |
Bilgi
pm2 startup komutundan sonra terminal talimatlarını izleyin — PM2, otomatik başlatma için bir systemd birimi oluşturacaktır.
Yöntem Karşılaştırması¶
| Kriter | screen | systemd | PM2 |
|---|---|---|---|
| Yeniden başlatma sonrası otomatik başlatma | Hayır | Evet | Evet (pm2 startup gerektirir) |
| Çökme sonrası yeniden başlatma | Hayır | Evet | Evet |
| Günlük kaydı | Yalnızca oturumda | journalctl | Yerleşik günlükler |
| Güvenlik | Düşük | Yüksek (izolasyon ayarları) | Orta |
| Yapılandırma karmaşıklığı | Düşük | Orta | Düşük (ancak Node.js gerektirir) |
| Üretim için uygunluk | Hayır | Önerilen | Evet (zaten Node.js kullanılıyorsa) |
Ek
Bot durduğunda uyarı kurun (örneğin, systemd + healthchecks.io aracılığıyla);
Bağımlılıkları düzenli olarak güncelleyin pip list --outdated;
Tokenları saklamak için .env dosyalarını ve python-dotenv kullanın (ve bunları Git'ten hariç tutun!).